Sample Table
User1 | User2
123, 555
123, 1
123, 2
456, 2
555, 456
12, 123
12, 456
输入:我输入列表(123,456)
来查看包含其中任何一个值的行。然后我希望MySQL检查该行中的相反/其他列,并按该值对输出进行分组。
输出:
User | Count(*)
555, 2
2, 2
1, 1
555计数为2,因为行123, 555
和行555, 456
都包含其中一个输入:123和456.
我已尝试查看CASE
关键字,因为此处明显的障碍是抓住相反/剩余的列并将其用作返回值之一。
完全错了,但是我的半完成方法之一。
SELECT user, count(*) from friendships
WHERE User1 in (123,456) as user or User2 in (123,456) as user
答案 0 :(得分:3)
这个棘手的部分是你的标准是IN()正在查看users1列,然后尝试在user2列中查找重复...所以你需要一个UNION联接
SELECT user2, COUNT(*)
FROM
( SELECT user1, user2
FROM friends f
WHERE f.user1 IN(123, 456)
UNION ALL
SELECT f.user1, f.user2
FROM friends f
JOIN friends f1 ON f1.user1 = f.user2
WHERE f.user1 IN(123, 456)
)t
GROUP BY user2;