Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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 MySQL:使用union检查两列是否包含彼此的值?_Php_Mysql_Sql - Fatal编程技术网

Php MySQL:使用union检查两列是否包含彼此的值?

Php MySQL:使用union检查两列是否包含彼此的值?,php,mysql,sql,Php,Mysql,Sql,我有一个friend表,它有两个主列uid和fid,我主要是想看看这个朋友是否也是用户的朋友,所以 uid 5 -> fid 6 uid 6 -> fid 5 我曾尝试混合和混合SELECT查询,以某种方式返回决定性的结果,但似乎找不到任何结果。count将返回一个或两个列,其中两个是正确的,但是PHP的PDO并没有很好的方法来查找所选的未受影响的行的数量,而不使用hackish循环 (SELECT count(uid) FROM friends WHERE uid = 1 AND

我有一个friend表,它有两个主列uid和fid,我主要是想看看这个朋友是否也是用户的朋友,所以

uid 5 -> fid 6
uid 6 -> fid 5
我曾尝试混合和混合SELECT查询,以某种方式返回决定性的结果,但似乎找不到任何结果。count将返回一个或两个列,其中两个是正确的,但是PHP的PDO并没有很好的方法来查找所选的未受影响的行的数量,而不使用hackish循环

(SELECT count(uid) FROM friends WHERE uid = 1 AND fid = 2)
  UNION ALL -- Or plain union
(SELECT count(uid) FROM friends WHERE uid = 2 AND fid = 1)
当然,这仍然返回一行或两行0/1或0或1


您能想出一种方法在MySQL的第一列中返回1或0吗?还是将此功能写入我的程序的更好方法?我尽量避免做一些粗俗的事情

为什么一个查询都不做呢

select count(*)
from friends
where ((uid = 1) and (fid = 2)) or ((uid = 2) and (fid = 1))

请注意,您必须进行计数*,因为如果存在相互友谊,UID将不同。两行的计数为1,一行的计数为2。

为什么不是一个查询

select count(*)
from friends
where ((uid = 1) and (fid = 2)) or ((uid = 2) and (fid = 1))

请注意,您必须进行计数*,因为如果存在相互友谊,UID将不同。您将得到两行,计数为1,而一行的计数为2。

您需要一个自动加入来返回所有处于双射友谊中的成对用户/朋友:

SELECT f.uid, f.fid
FROM Friend f
    INNER JOIN Friend ff
       ON f.uid = ff.fid
       AND f.fid = ff.uid
请注意,在您的情况下,它将返回“副本”:

uid  |  fid
5       6
6       5

您需要一个自动加入来返回双射友谊中的所有情侣用户/朋友:

SELECT f.uid, f.fid
FROM Friend f
    INNER JOIN Friend ff
       ON f.uid = ff.fid
       AND f.fid = ff.uid
请注意,在您的情况下,它将返回“副本”:

uid  |  fid
5       6
6       5
要避免重复行。。e、 g.每两个朋友两行,添加条件a.uid 要避免重复行。。e、 g.每两个朋友两行,添加条件a.uid
谢谢你的这些例子,我喜欢挑选它们来学习。谢谢你的这些例子,我喜欢挑选它们来学习。
SELECT a.uid
     , COUNT(*) AS numberOfFriends
FROM friends a
  JOIN friends b
     ON a.fid = b.uid
    AND a.uid = b.fid
WHERE a.uid = X
GROUP BY a.uid