Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.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
Mysql 从用户未登录的表中选择一个用户,该用户不是其他表行的一部分_Mysql - Fatal编程技术网

Mysql 从用户未登录的表中选择一个用户,该用户不是其他表行的一部分

Mysql 从用户未登录的表中选择一个用户,该用户不是其他表行的一部分,mysql,Mysql,我有两个表:用户和联系人 在用户中,我有一个“用户名”和一些其他列,但它们对于查询并不重要 在联系人中,我有“SUsername”和“RUsername” 这样做的目的是当用户登录时,他们可以搜索其他用户并添加他们。当他们添加它们时,登录的用户名被添加到RUsername列中,添加的用户被插入到SUsername中 然而,当我去列出用户时,问题就出现了。逻辑是:列出所有用户,只要他们不是登录$Session\u Username的用户,还要确保它不显示任何用户名,其中$Session\u Use

我有两个表:用户和联系人

在用户中,我有一个“用户名”和一些其他列,但它们对于查询并不重要

在联系人中,我有“SUsername”和“RUsername”

这样做的目的是当用户登录时,他们可以搜索其他用户并添加他们。当他们添加它们时,登录的用户名被添加到RUsername列中,添加的用户被插入到SUsername中

然而,当我去列出用户时,问题就出现了。逻辑是:列出所有用户,只要他们不是登录$Session\u Username的用户,还要确保它不显示任何用户名,其中$Session\u Username在contacts表的SUsername或RUsername中存在。因为他们已经和这个人有联系了。我必须检查两者的原因是因为有人可能会添加我或我可能会添加某人,这决定了在RUsername或SUsername中的位置

我已经尝试了很多方法使它工作,但我只得到部分工作查询。最好的是这个:

"SELECT * FROM users WHERE (Username != '$Session_Username' AND Username != (SELECT SUsername FROM contacts WHERE RUsername = '$Session_Username')) OR
(Username != '$Session_Username' AND Username != (SELECT RUsername FROM contacts WHERE SUsername = '$Session_Username'))
;";
当contacts表中有一行包含RUsername中的$Session_Username时,此选项有效。但是,如果我以联系人表中不存在的用户身份登录,它将返回空。我还需要补充一点

"Username != '$Session_Username'" 
对于那些在联系人中没有条目的人来说,查询中的某个地方也是如此。但当我无论如何都要添加它时,它会在运行时终止查询,而不执行其他两个。我尝试了许多和+或的组合,但我似乎无法正确理解逻辑


任何帮助或指导都将不胜感激

这是社交媒体网站中的标准查询。使用union比使用复杂的where子句容易得多:


请看这些SQL字符串是否适用于PHP?您是否将PHP变量直接插入到SQL字符串中?如果是的话,请看一看,非常感谢!我仍然是mysql的新手,但这对我帮助很大,也很有意义!对于遇到这种情况的人,我使用的是:选择u1.*从不存在的用户u1中选择1从SUsername='$Session\u Username'和RUsername=u1.Username和NOT EXISTS的联系人中选择1从RUsername='$Session\u Username'和SUsername=u1.Username和Username!='$会话_用户名';
select u1.*
from users u1
left join
    (select susername as username from contacts where rusername=...
     union all
     select rusername from contacts where susername=...
    ) t on u1.username=t.username
 where t.username is null and u1.username <> ...
select u1.*
from users u1
where not exists (select 1 from contacts where susername=... and rusername=u1.username)
  and not exists (select 1 from contacts where rusername=... and susername=u1.username)
  and username=...