2016-11-26 5 views
0

Ich möchte die letzten Nachrichten zwischen aktuellen Benutzer und andere abrufen und es auf der Nachrichtenseite des Benutzers wie Facebook zeigt. Ich verwendet, um diesesErhalten letzte Nachricht zwischen aktuellen Benutzer und anderen von sql

<pre> 
select * 
from ch_messages 
where receiver='$current_user_id' or sender='$current_user_id' && (least(sender, receiver), greatest(sender, receiver), f_msg_date)  
in 
(
    select 
     least(sender, receiver) as x, greatest(sender, receiver) as y, 
     max(f_msg_date) as date 
    from ch_messages 
    group by sender, receiver 
) 
</pre> 

aber alle messenges von einem Benutzer auf den aktuellen Benutzer erhalten und des aktuellen Benutzers letzte Nachricht an den Benutzer. I want it like this image

Dies ist meine Tabellenstruktur

<pre> 
mid => messages id 
sender => The sender of the message 
receiver => The receiver of the message 
msg => The message sent 
f_msg_date => date in which the message was sent 
</pre> 

Antwort

0

Sie einfach das Zitat um reciver in Unterabfrage und vorausgesetzt, die jede Nachricht zu entfernen, müssen haben eine eindeutige ID-Säule (Autoinkrement), wenn Sie die letzte Nachricht möchten

select * 
    from ch_messages 
    where receiver='$current_user_id' 
    or sender='$current_user_id' 
    AND (id, least(sender, receiver), greatest(sender, receiver), f_msg_date)  
    in 
    ( select 
      max(id) 
     , least(sender, receiver) 
     , greatest(sender, receiver), 
      max(f_msg_date) 
     from ch_messages 
     group by sender, receiver 
) 
+0

Ich habe aber es zeigt alle Nachrichten einschließlich der aktuellen Benutzer Nachrichten an andere. aber ich möchte die aktuelle Benutzer-Nachricht, wenn es eine letzte Nachricht ist, sollte eine Antwort sein –

+0

@ClementSam. Habe update die Antwort hoffe was du brauchst oder führe dich zum richtigen Ergebnis – scaisEdge

+0

Jede Nachricht hat eine eindeutige ID. Ich habe die Abfrage aktualisiert, aber es gibt einen Fehler. –

Verwandte Themen