MYSQL结构:
ID | USERID | FRIENDID | Type
-------------------------------
1 | 10 | 20 | Gold
2 | 20 | 10 | Gold
3 | 30 | 40 | Silver
4 | 40 | 30 | Silver
5 | 50 | 60 | Gold
6 | 60 | 50 | Gold
7 | 70 | 80 | Bronze
8 | 80 | 70 | Bronze
9 | 90 | 100 | Bronze
10 | 100 | 90 | Bronze
我想要的是组(ID 1&ID 2)和(ID 5&ID 6),因为它们是“黄金”类型,而不是按类型分组。
返回结果:
1. 10 & 20, type:gold. (GROUP)
3. 30 & 40, type:silver.
4. 40 & 30, type:silver.
5. 50 & 60, type:gold. (GROUP)
7. 70 & 80, type:bronze.
8. 80 & 70, type:bronze.
9. 90 & 100, type:bronze.
10. 100 & 90, type:bronze.
如何使用php查询实现这一点?
演示:http://sqlfiddle.com/#!2/13bd3/1
最佳答案
您需要做的是根据类型添加一个额外的分组子句。当它是“黄金”时,你得到一个常数。否则,您将使用id:
select least(userid, friendid), greatest(userid, friendid), type
from t
group by least(userid, friendid), greatest(userid, friendid),
(case when type = 'gold' then 0 else id end)
这确实重新排列了非黄金类型的id的顺序。如果排序很重要,那么SQL就要复杂一些:
select (case when type = 'gold' then least(userid, friendid) else userid end),
(case when type = 'gold' then greatest(userid, friendid) else friendid end),
type
from t
group by least(userid, friendid), greatest(userid, friendid),
(case when type = 'gold' then 0 else id end)
关于mysql - MYSQL GROUP BY具有特定列的多个不同值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14296545/