Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQL查询不等于运算符不工作,带有联接_Php_Mysql_Sql_Pdo - Fatal编程技术网

Php SQL查询不等于运算符不工作,带有联接

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

我想知道是否有人可以帮助我进行SQL查询

我试图显示所有结果,除了表2中的userid列等于1和hidden列等于1之外

我基本上是试图根据用户的
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列上匹配)的用户无法看到12(在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。