Mysql
 sql >> Database >  >> RDS >> Mysql

Seleziona l'ultimo messaggio tra la comunicazione di due utenti in mysql

SELECT data.* FROM 
(SELECT MAX(sendtime) AS sendtime 
         FROM data 
         WHERE 1 IN (sender,receiver)
         GROUP BY IF (1 = sender,receiver,sender)) AS latest
LEFT JOIN data ON latest.sendtime = data.sendtime AND 1 IN (data.sender, data.receiver)
GROUP BY IF (1 = data.sender,data.receiver,data.sender)

Raccomando di utilizzare un ID sequenza univoco nella tabella per evitare GROUP BY esterno .Se hai un message_id univoco incrementale (ovvero message_id più grande corrisponde al successivo sendtime ), la query sarebbe molto più semplice:

SELECT data.* FROM 
(SELECT MAX(message_id) AS message_id 
         FROM data 
         WHERE 1 IN (sender,receiver)
         GROUP BY IF (1 = sender,receiver,sender)) AS latest
LEFT JOIN data USING(message_id)