sql query not equal to operator not working,带join

zzwlnbp8  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(418)

我想知道是否有人能帮我做一个sql查询。
我试图显示所有结果,除了在表2中userid列等于1和hidden列等于1之外。
我基本上是试图隐藏结果,对个人用户的基础上,他们的意见 id 以及隐藏列中的值 1 或者是空的。
到目前为止,我已经成功地提出了一个相反的查询,但不知道如何更改它。我试过添加 != , <> , NOT 还有其他一些事情,但对我来说什么都不管用!
这是我正在处理的问题。

$stmt = $conn->prepare("SELECT tl.id, tl.name, tl.locale, uh.hidden 
  FROM theList AS tl 
  LEFT JOIN user_hidden_list AS uh ON uh.est_id = tl.id 
  WHERE uh.userid = '1' AND uh.hidden = '1'");

如何显示除带 uh.userid = 1 以及 uh.hidden = 1 更新:表
表格: user_hidden_list ```
userid | Hidden | est_id

1 | 1 | 1
2 | 1 | 1
1 | 1 | 2

表格: `theList` ```
id |    name  | locale
------------------------
 1 |    Jacks   |   LDN
 2 |    MacD's  |   LDN
 3 |    BK      |   LDN
 4 |    Byron   |   LDN

如果我用和登录 userid 的: 1 我应该看看:bk和拜伦。 2 我应该看看:麦迪,bk和拜伦。 3 (或者别的什么)我应该看看:杰克,麦克,贝克和拜伦。

xmjla07d

xmjla07d1#

试一试,甚至连妄想症都有:

SELECT tl.id, tl.name, tl.locale, uh.hidden 
FROM theList tl JOIN
      user_hidden_list uh
      ON uh.est_id = tl.id 
WHERE (uh.userid <> 1 AND uh.hidden <> 1);
ipakzgxi

ipakzgxi2#

如果我理解正确,表user\u hidden\u list包含一个用户和他看不到的用户之间的关系。例如,id等于1的用户(在userid列上匹配)看不到用户1和2(在est\u id列上匹配)。
因此,对于id=x的特定用户,我们可以得到他看不到的用户的id列表,如下所示:

SELECT
    est_id
FROM
    user_hidden_list
WHERE
    userid = X AND hidden = 1;

使用上一个查询,我们可以在下一个查询中获得用户x的可见用户:

SELECT
    tl.id, tl.name, tl.locale
FROM
    theList AS tl
WHERE
    tl.id NOT IN (SELECT est_id
                  FROM user_hidden_list
                  WHERE userid = X AND hidden = 1);

我相信会有更好的(优雅的)方法来做这件事,但我刚刚离开工作,我的思想不是很好地工作了。

anhgbhbe

anhgbhbe3#

我试图显示所有结果,除了在表2中userid列等于1和hidden列等于1之外。
这并不意味着 join . 你似乎想要:

SELECT tl.id, tl.name, tl.locale, uh.hidden 
FROM theList tl JOIN
      user_hidden_list uh
      ON uh.est_id = tl.id 
WHERE NOT (uh.userid = 1 AND uh.hidden = 1);

我猜是的 userid 以及 hidden 是某种数字,所以我去掉了单引号。如果它们真的是字符串,那么使用单引号。
这也假设这些值不能 NULL . 如果这是一种可能性,那么可以调整逻辑(使用空安全比较器) <=> ).

相关问题