2016-11-26 8 views
0

Я хочу получить последние сообщения между текущим пользователем и другими и отобразить его на странице сообщений пользователя, например, как работает facebook. Я использовал этотПолучить последнее сообщение между текущим пользователем и другими пользователями из 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> 

но получить все messenges от пользователя к текущему пользователю и последнему сообщению текущего пользователя к пользователю. I want it like this image

Это моя структура

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

ответ

0

стола Вам просто нужно удалить котировку вокруг ресивера в подзапросе и если предположить, что каждое сообщение имеет уникальный столбец ID (автоматическое приращение), если вы хотите, последнее сообщение

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

У меня есть, но он отображает все сообщения, включая сообщения текущего пользователя, другим. но я хочу, чтобы сообщение текущего пользователя, если это последнее сообщение, должно быть ответом –

+0

@ClementSam. обновите ответ, надеюсь, что вам нужно или приведет вас к правильному результату – scaisEdge

+0

каждое сообщение имеет уникальный идентификатор. Я обновил запрос, но он дал ошибку. –