Php SQL查询不等于运算符不工作,带有联接
我想知道是否有人可以帮助我进行SQL查询 我试图显示所有结果,除了表2中的userid列等于1和hidden列等于1之外 我基本上是试图根据用户的Php SQL查询不等于运算符不工作,带有联接,php,mysql,sql,pdo,Php,Mysql,Sql,Pdo,我想知道是否有人可以帮助我进行SQL查询 我试图显示所有结果,除了表2中的userid列等于1和hidden列等于1之外 我基本上是试图根据用户的id和隐藏列中的值1或空值对单个用户隐藏结果 到目前为止,我已经成功地提出了一个与之相反的查询,但不知道如何更改它。我已尝试添加=,,不和其他一些东西,但对我来说什么都不管用 这是我正在处理的问题 $stmt = $conn->prepare("SELECT tl.id, tl.name, tl.locale, uh.hidden FROM
id
和隐藏列中的值1
或空值对单个用户隐藏结果
到目前为止,我已经成功地提出了一个与之相反的查询,但不知道如何更改它。我已尝试添加=
,
,不
和其他一些东西,但对我来说什么都不管用
这是我正在处理的问题
$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
更新:表格
表:用户隐藏列表
userid | Hidden | est_id
---------------------------
1 | 1 | 1
2 | 1 | 1
1 | 1 | 2
id | name | locale
------------------------
1 | Jacks | LDN
2 | MacD's | LDN
3 | BK | LDN
4 | Byron | LDN
表:theList
userid | Hidden | est_id
---------------------------
1 | 1 | 1
2 | 1 | 1
1 | 1 | 2
id | name | locale
------------------------
1 | Jacks | LDN
2 | MacD's | LDN
3 | BK | LDN
4 | Byron | LDN
因此,如果我使用和userid
登录:
1
我应该看看:BK和拜伦
2
我应该看看:MacD's、BK和拜伦
3
(或其他任何东西)我应该看看:杰克、麦卡德、贝克和拜伦
我试图显示所有结果,除了表2中的userid列等于1和hidden列等于1之外
这并不建议使用外部连接。你似乎想要:
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
。如果这是可能的,那么可以调整逻辑(使用空安全比较器
)。如果我理解正确,表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;
使用上一个查询,我们可以在下一个查询中获得userX的可见用户:
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);
我相信会有更好的(优雅的)方法来做到这一点,但我刚刚离开工作,我的大脑现在工作得不好。尝试一下这个,即使是偏执:
选择tl.id、tl.name、tl.locale、uh.hidden
从列表tl JOIN
用户隐藏列表
在uh.est_id=tl.id上
其中(uh.userid 1和uh.hidden 1);
它应该可以与配合使用=代码>或
。也许看看?可能还需要查看正确的转义/。提示:当您从外部联接表引用列时,它会将其转换为内部联接。您可以在查询的
部分对外部联接表应用过滤器。userid和hidden的列类型是什么?示例数据和所需结果将非常有用。谢谢大家!我已经发布了一个更新的表格和结果的问题!谢谢你的帮助!不幸的是,我仍然无法让它工作!我已经为这个问题添加了更多的细节!谢谢通过一些调整,它成功地工作了!已切换用户id和est id。另外。。。用户id应该看起来像用户id。