2016-11-26 2 views
0

Je veux récupérer les derniers messages entre l'utilisateur actuel et les autres et l'afficher dans la page des messages de l'utilisateur comme Facebook. J'ai utilisé cetteRécupérer le dernier message entre l'utilisateur courant et les autres depuis 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> 

mais obtenir tous les messenges d'un utilisateur à l'utilisateur actuel et l'utilisateur actuel dernier message à l'utilisateur. I want it like this image

C'est ma structure de table

<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> 

Répondre

0

Il vous suffit de retirer la citation autour consignataire en sous-requête et en supposant que le chaque message ont une colonne d'identifiant unique (incrémentation automatique) si vous voulez que le dernier message

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

J'ai mais il affiche tous les messages, y compris les messages de l'utilisateur actuel à d'autres. mais je veux que le message de l'utilisateur actuel, s'il s'agit d'un dernier message, soit une réponse –

+0

@ClementSam. avoir mis à jour la réponse espoir est ce que vous avez besoin ou vous conduire au résultat correct – scaisEdge

+0

chaque message a un identifiant unique. J'ai mis à jour la requête mais elle donne une erreur. –