【发布时间】:2018-05-29 06:55:11
【问题描述】:
我尝试使用这些架构进行简单的聊天:
mes_id int(10) unsigned Auto Increment
mes_useid_receiver int(10) unsigned
mes_useid_sender int(10) unsigned
mes_date int(10) unsigned
mes_message text
mes_read tinyint(3) unsigned [0]
mes_visible_for_who int(10) unsigned NULL NULL = both; 0 = none; ID user
问题是,如何获取已接收消息和已发送消息的联系人列表?
我正在尝试这样的事情:
SELECT use_name, MAX(mes_date) AS date
FROM message JOIN user ON mes_useid_receiver=use_id
WHERE uti_id!=1
AND (mes_useid_receiver=1 OR mes_useid_sender=1)
AND (mes_visible_for_who IS NULL OR mes_visible_for_who=1)
GROUP BY use_id
ORDER BY date DESC
但是通过这个查询,我只能获取向 user_id = 1 发送消息的联系人,我还想获取 user_id = 1 发送消息的联系人。
已编辑:
通过联合,我几乎可以得到我想要的:
SELECT use_id, use_name, mes_read FROM message
JOIN user ON mes_useid_receiver=use_id
WHERE use_id!=1
AND (mes_useid_receiver=1 OR mes_useid_sender=1)
AND (mes_visible_for_who IS NULL OR mes_visible_for_who=1) GROUP BY use_id
UNION
SELECT use_id, use_name, mes_read FROM message
JOIN user ON mes_useid_sender=use_id
WHERE use_id!=1
AND (mes_useid_receiver=1 OR mes_useid_sender=1)
AND (mes_visible_for_who IS NULL OR mes_visible_for_who=1) GROUP BY use_id
我需要 mes_date 来排序列表,但如果我选择 mes_date 我会得到重复的行。
感谢您的帮助。
【问题讨论】: