我想知道是否有人能帮我做一个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
(或者别的什么)我应该看看:杰克,麦克,贝克和拜伦。
3条答案
按热度按时间jexiocij1#
试一试,甚至连妄想症都有:
ecfsfe2w2#
如果我理解正确,表user\u hidden\u list包含一个用户和他看不到的用户之间的关系。例如,id等于1的用户(在userid列上匹配)看不到用户1和2(在est\u id列上匹配)。
因此,对于id=x的特定用户,我们可以得到他看不到的用户的id列表,如下所示:
使用上一个查询,我们可以在下一个查询中获得用户x的可见用户:
我相信会有更好的(优雅的)方法来做这件事,但我刚刚离开工作,我的思想不是很好地工作了。
zkure5ic3#
我试图显示所有结果,除了在表2中userid列等于1和hidden列等于1之外。
这并不意味着
join
. 你似乎想要:我猜是的
userid
以及hidden
是某种数字,所以我去掉了单引号。如果它们真的是字符串,那么使用单引号。这也假设这些值不能
NULL
. 如果这是一种可能性,那么可以调整逻辑(使用空安全比较器)<=>
).