从 sql 获取当前用户和其他用户之间的最后一条消息
Get last message between current user and others from sql
我想检索当前用户和其他人之间的最后一条消息,并像 facebook 一样将其显示在用户的消息页面中。我用过这个
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
)
但它会获取从一个用户到当前用户的所有消息以及当前用户给该用户的最后一条消息。
I want it like this image
这是我的table结构
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
您只需要删除子查询中 reciver 周围的引号和
如果你想要最后一条消息,假设每条消息都有一个唯一的 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
)
我想检索当前用户和其他人之间的最后一条消息,并像 facebook 一样将其显示在用户的消息页面中。我用过这个
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
)
但它会获取从一个用户到当前用户的所有消息以及当前用户给该用户的最后一条消息。 I want it like this image
这是我的table结构
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
您只需要删除子查询中 reciver 周围的引号和 如果你想要最后一条消息,假设每条消息都有一个唯一的 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
)