2016-04-18 11 views
2

I haben, indem sie mit zwei Spalten zu gruppieren versucht:Gruppe durch zwei Spalte mit vice versa Wert

SELECT recipient_id, sender_id, count(*) FROM messengers WHERE recipient_id=41 OR sender_id=41 group by recipient_id, sender_id 

Der Ausgang wird, wie unten dargestellt werden:

enter image description here

Wie kann ich Reihe kombinieren 1 und Zeile 2 als Zeile, da recipient_id und sender_id denselben Wert haben, nämlich 40 und 41.

Antwort

2

Ein Trick, den Sie hier verwenden können, ist GROUP BY der kleiner der beiden ID-Spalten und die größer der beiden ID-Spalten:

SELECT LEAST(recipient_id, sender_id), GREATEST(recipient_id, sender_id), COUNT(*) 
FROM messengers 
WHERE recipient_id = 41 OR sender_id = 41 
GROUP BY LEAST(recipient_id, sender_id), GREATEST(recipient_id, sender_id) 
+0

sieht es so weit gut. Ich werde versuchen, es zu benutzen, und lass uns warten, bis andere antworten, bevor ich deine als angenommene Antwort abstimme. Vielen Dank! –

+0

Ich habe Ihre Antwort geändert 'SELECT * FROM (SELECT * FROM Messenger ORDER BY ID desc) als A WHERE recipient_id = 41 ODER sender_id = 41 GROUP BY LEAST (recipient_id, sender_id), GREATEST (recipient_id, sender_id)' aber ich bekomme Probleme, dies zu Laravel Query Builder zu konvertieren. –

+0

@ Mr.Byte Der ANSI 92-Standard verlangt, dass Spalten, die in SELECT erscheinen, entweder auch in der GROUP BY erscheinen oder Aggregate sind. Daher sollten Sie hier nicht 'SELECT *' verwenden. Sie können eine neue Frage mit Ihrem Laravel-Problem stellen. –

Verwandte Themen