2

我有一个要求,我必须根据未读消息从聊天表中订购用户,然后是最新的对话。

我的表结构如下:

编号 | from_member_id | to_member_id | 添加时间 | 留言 | is_viewed

这里 from_member_id 和 to_member_id 是成员表的主键。message 是相互发送的消息,is_vied 是一个标志,表示消息是否被接收者或 to_member_id 查看。所以,我现在有一个 member_id,我必须将它与两列都匹配,但我希望结果应该先按照未读消息排序,然后是未读消息。

我正在使用这个查询

  SELECT `from_member_id`
       , `to_member_id`
       , MAX(`added_time`) AS latest
       , `is_viewed`
    FROM `wp_doc_profile_message`
   WHERE `from_member_id` = 3
GROUP BY `from_member_id`
ORDER BY `is_viewed` ASC, `latest` DESC 

它没有给我想要的结果。请帮忙。

4

1 回答 1

0

在这里你可以匹配to_member_id OR 运算符和 group by id消息表 id,这样记录就不会重复

SELECT `from_member_id`,`to_member_id`,max(added_time) as latest,`is_viewed` FROM
 wp_doc_profile_message WHERE  from_member_id = 3  OR to_member_id=3 
 group by `id`
 ORDER BY is_viewed ASC, latest DESC

或者

SELECT pm.`from_member_id`,pm.`to_member_id`,max(pm.added_time) as latest,pm.`is_viewed` FROM
 wp_doc_profile_message  pm
LEFT JOIN members m ON (m.id=pm.`from_member_id` OR m.id=pm.`to_member_id` )

 group by pm.`id`
 ORDER BY pm.is_viewed ASC, latest DESC
于 2013-07-29T13:33:45.533 回答