2016-08-21 3 views
-1
SELECT * 
from message m , message_viewer v 
where m.id = v.message_id 
group by m.author_id , v.viewer_id, m._date 

id | author_id | viewer_id | read 
1 | 103 | 102 | 0 
2 | 102 | 103 | 1 
3 | 101 | 103 | 0 
4 | 103 | 101 | 0 

i das Ergebnis willich will jeden asymmetrischen Spaltenwert in Mysql-Datenbank zu entfernen

id | author_id | viewer_id | read 
1 | 103 | 102 | 0 
4 | 103 | 101 | 0 
+0

Sie haben eine GROUP BY-Funktion, aber keine Aggregierungsfunktion, daher ist die Zeile, die GROUP BY für jede Gruppe zurückgibt, beliebig. Wolltest du das? –

Antwort

0

Da Sie durch die einzigartige Kombination von Autoren und Lesern Ihre Ergebnisse aggregieren sein wollen, hier ist eine Option least und greatest:

select max(m.id) as id, 
    least(m.author_id, mv.viewer_id) as author_id, 
    greatest(m.author_id, mv.viewer_id) as viewer_id 
from message m 
    join message_viewer mv on m.id = mv.message_id 
group by least(m.author_id, mv.viewer_id), 
    greatest(m.author_id, mv.viewer_id) 

Dies gilt das max Aggregat, um die Nachrichten-ID zurückzugeben - ohne sie erhalten Sie nur ein beliebiges Ergebnis zurückgegeben. Es war auch nicht klar aus Ihrer Frage, woher die read Spalte kommt.

Verwandte Themen