Php MySQL:使用union检查两列是否包含彼此的值?
我有一个friend表,它有两个主列uid和fid,我主要是想看看这个朋友是否也是用户的朋友,所以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
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谢谢你的这些例子,我喜欢挑选它们来学习。谢谢你的这些例子,我喜欢挑选它们来学习。
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