我有这个表,我使用(但不仅限于),用于在数据库中存储的朋友:朋友用户+共同的朋友的测试与其他用户
user_1 | user_2 | status
其中“状态”可以-1,0或1.在这里,我们将只考虑状态为“0”(等待user_1)或“1”(由user_2批准)的情况。我有以下查询查找挂起/批准朋友对于一个给定$ USER:
SELECT user_1,user_2,status
FROM Friends
WHERE (user_2 = '$user' OR user_1 = '$user') AND status >= 0;
这里的目标是要修改查询也告诉我们,如果给定的$用户2 $常见的(批准)的朋友user1和$ user1的每个(已批准)朋友。
经过一番研究,我发现左连接可以做到这一点,通过设置另一个字段为NULL(如果没有共同)或$ user2。我想要有效地做到这一点。我尝试了几次,但没有成功。
感谢由您的帮助
编辑:例如,假设我们有如下条目:
a | b | 1
c | a | 1
c | b | 1
a | d | 1
我想列出的“a”和每个朋友F的朋友'a',验证'b'是f和'a'的共同朋友。另外,对于相互测试,f =/= b。这种查询的结果将是:
a | b | 1 | NULL
c | a | 1 | b
a | d | 1 | NULL
让我知道如果你需要更多的澄清
我不明白:-)你想得到什么?也许一些简短的例子? –
和'c | a | 1 | d'?我不会在MySQL中这样做,但是在PHP中或者您正在使用的任何语言中...... MySQL在较大的数据集中速度会很慢。 –
第四场比赛只测试与'b'的相互友谊,这就是为什么你所建议的线不应该出现。另一种可能性就是在PHP中这样做,并为每个条目启动一个查询来测试与'b'的相互友谊。但我担心用这种方式发送多重查询会比较慢,只发送带有左连接的单个查询。但也许你是对的,我很乐意看到有关这 –