我试图重建一个现有的消息系统,使其看起来类似于Twitter的DM服务。目前,我只显示未读邮件到我的用户,但我想显示在一个单一的“线” 2个用户之间发送这样的消息:查询在“线程”视图中获取最近的消息
这里是我当前的数据库结构和一些样本数据: http://sqlfiddle.com/#!2/574e3/1/0
我试着建立查询一步一步的分解,但我很困惑。 这是我所采取的步骤的列表:
1.获取之间的“对话”的两个用户
SELECT * FROM uc_user_messages
WHERE uc_user_messages.user_id_1 = 1 OR uc_user_messages.user_id_2 = 1
2显示的最后一条消息之间发送的邮件列表两个用户
SELECT * FROM uc_user_messages
WHERE uc_user_messages.user_id_1 = 1 OR uc_user_messages.user_id_2 = 1
ORDER BY timestamp DESC
3组谈话由USER_ID(显然这将是一个用户的名字和一帮在加入机生产线应用程序)。
SELECT * FROM uc_user_messages
WHERE uc_user_messages.user_id_1 = 1 OR uc_user_messages.user_id_2 = 1
GROUP BY uc_user_messages.user_id_1 AND uc_user_messages.user_id_2
ORDER BY timestamp DESC
而这正是我卡住了...问题是,在两个用户之间的对话发送的第一条消息将显示,而不是最新的消息:http://sqlfiddle.com/#!2/942fb/2
什么我能做些什么吗?希望我不必做任何重大的数据库设计更改。任何帮助是极大的赞赏。
干杯,
乔尔
我可能误解了这个问题,但OP似乎对涉及user_id号码1的消息感兴趣。那么最后一条消息(“消息答复”)如何相关? – 2013-05-10 17:12:53
@JamesHolderness你不会误解它。这只是我没有额外的条件来筛选特定的'User_ID'。上面的查询将显示多个用户的所有对话的最新消息。一个简单的'AND 1 IN(USER_ID_1,USER_ID_2)'将只给出包含'user_id = 1'的对话结果[这是一个DEMO](http://sqlfiddle.com/#!2/942fb/24) – 2013-05-10 17:15:11
OK,I想想我现在正在做什么。我只是一个白痴。 – 2013-05-10 17:17:42