我有桌子“user_follow”,“images”,“users”
我的user_id:3 我的朋友user_id:6
我需要查询以选择我和朋友的所有朋友的用户名和图片 1)不要互相告诉我们 2)重复的朋友显示为1
我的查询是:
$sql = "SELECT u.username, i.image, u.id
FROM users u
LEFT JOIN user_follow f ON u.id = f.follow_id
LEFT JOIN images i ON u.id = i.user_id
WHERE f.user_id = 6 OR f.user_id = 3
GROUP BY u.id
ORDER BY f.date DESC";
结果是:
[user_both_follow] => Array
(
[0] => Array
(
[username] => Kolxoznik1
[image] =>
[id] => 1
)
[1] => Array
(
[username] => 7777
[image] =>
[id] => 8
)
[2] => Array
(
[username] => 6666
[image] => flw3utn9igiqh7dtt2o61ydf8_174.jpeg
[id] => 6
)
[3] => Array
(
[username] => 8888
[image] =>
[id] => 7
)
)
我的查询工作率为50%,它将相同的朋友分组,但问题是显示我的朋友3-> 6(显示)
答案 0 :(得分:2)
什么是' id'专栏?恕我直言主键应该是(user_id,follow_id)..
一个简单的AND f.follow_id != 3 and f.follow_id != 6
应修复您的查询。
可能简化为:
WHERE f.user_id IN(3,6) AND f.follow_id NOT IN (3,6)
此外,您可能需要(RIGHT) JOIN user_follow
而不是左。
此外,也许MySQL很聪明,可以对此进行优化,但我想知道EXPLAIN
是否为该查询说明了不同的内容:
SELECT u.username, i.image, u.id
FROM user_follow f
JOIN users u ON u.id = f.follow_id
LEFT JOIN images i ON u.id = i.user_id
WHERE f.user_id IN(3,6) AND f.follow_id NOT IN(3,6)
GROUP BY u.id
ORDER BY f.date DESC
可能足够聪明,但为什么要让查询计划员猜测......