2016-07-11 4 views
1

MY Abfrage wie dieWie Gruppe von 1,2 und 2,1 sowohl

select id,user_id,friend_id 
from message 
where user_id = '$user_id' 
or friend_id = '$user_id' 
group by user_id,friend_id; 

verwenden, aber ich habe mehrere Rekord für z 1,61 und 61,1 Benutzer. Ich möchte einen einzelnen Datensatz, aber zwei Benutzer entweder Nachricht gesendet oder empfangen. ist es von user_id, friend_id und friend_id möglich Satzgruppe, user_id

Antwort

3

Sie CASE EXPRESSION verwenden können:

SELECT t.id, 
     CASE WHEN t.user_id > t.friend_id THEN t.user_ID ELSE t.friend_ID end as ID_1, 
     CASE WHEN t.user_id > t.friend_id THEN t.friend_id ELSE t.user_id end as ID_2 
FROM message t 
where t.user_id = '$user_id' or 
t.friend_id = '$user_id' 
group by ID_1,ID_2 
+0

Fall, wenn der Zustand in beiden Bedingungen gleich ist? – dev

+0

@dharmendrachaudhary Wie kann ein Benutzer eine Nachricht an sich selbst senden? – Wanderer

+0

Ich bearbeite meine Frage funktioniert die obige Abfrage, wenn die Bedingung "oder" ist, dann "und" – dev

1

Wenn Sie eine Liste aller Nutzer wollen bekommen, die mit 61 mitgeteilt wurde:

SELECT (CASE WHEN user_id = 61 THEN friend_id ELSE user_id END) AS usr 
FROM message 
WHERE user_id = 61 OR friend_id = 61 
GROUP BY usr 

SQLFiddle: http://sqlfiddle.com/#!15/2197d/12/0

Verwandte Themen