php - SQL 查询不等于运算符不工作,使用 JOIN
问题描述
我想知道是否有人可以帮助我进行 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
因此,如果我使用 and userid
of 登录:
1
我应该看到:BK 和拜伦。
2
我应该看到:MacD's、BK 和 Byron。
3
(或其他任何东西)我应该看到:Jacks、MacD's、BK 和 Byron。
解决方案
如果我理解正确,表user_hidden_list 维护一个用户和他看不到的用户之间的关系。因此,例如,id 等于1的用户(在userid列上匹配)看不到用户1和2(在 est_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);
我敢肯定会有更好(优雅)的方法来做到这一点,但我刚下班,我的头脑现在不太好。
推荐阅读
- python - 如何在 python 中使用 argparse 和 json 文件
- selenium - Chrome 无头驱动程序永远不会进入网站
- python - 求解利率以使 NPV 为零 Python
- php - 如何使用 ID 标签仅获取 wordpress 帖子的部分内容?
- android - 在ConstraintLayout android中填充水平宽度的最佳实践
- dapper - Dapper-Plus BulkInsert - 如何返回受影响的行数?
- blazor - 使用现有 Blazor 服务器作为 Blazor WASM 后端
- midi - 有没有办法在 winmm 中使用自定义声音字体/声音库?
- python - python - 财务 - EOF 错误 - 输入不足
- javascript - Discord.js 无法从公会中找到角色