2014-02-06 71 views
1

嗨我试图使用php和mysql制作消息系统。使用PHP/MySQL的消息系统

MySQL表很简单: ID 发送 接收 文本 时间戳

我试图使消息有点像Facebook/Twitter的所以列表是“对话”和最后一条消息在对话被查看。

这是我大气压:

(SELECT * FROM messages WHERE receiver = 13 OR sender = 13 GROUP BY receiver,sender ORDER BY id ASC) ORDER BY id ASC 
+0

你可以按关键字分组后按desc尝试。 – jeeva

回答

1
SELECT messages.* FROM messages, (SELECT MAX(id) as lastid FROM messages 
WHERE receiver = 13 OR sender = 13 
GROUP BY CONCAT(LEAST(receiver,sender),'.',GREATEST(receiver,sender))) as conversations 
WHERE id = conversations.lastid 
ORDER BY timestamp DESC 

您需要的是聊天伙伴之间的唯一对话ID。我用子查询模拟了这个,希望这有助于

+0

谢谢!这不是我的问题,但我一直在寻找同样的东西,而且这个工作非常完美! – ShoeLace1291

1

更新: 我不知道,如果它完美的作品:

SELECT * FROM messages 
WHERE receiver = 13 
GROUP BY receiver,sender 
ORDER BY timestamp DESC 
LIMIT 1 

UNION ALL 
SELECT * FROM messages 
WHERE sender = 13 
GROUP BY receiver,sender 
ORDER BY timestamp DESC 
LIMIT 1 

颠倒顺序:

ORDER BY timestamp DESC 
+0

问题是我正在查看多个对话。我需要仅查看每个人1并查看通话中发送的最后一条消息。 – Josh

+0

您可以在使用ORDER – user3106988

+0

之后使用LIMIT 1,但我不会看到与其他人的对话。 – Josh

0

DESC用于接收新行。与ASC或没有设置,默认为ASC:

(SELECT * FROM messages WHERE receiver = 13 OR sender = 13 GROUP BY receiver,sender ORDER BY id DESC) 

和SET LIMIT 1,1 ORDER后
我认为你需要它
(receiver = 13 AND sender = 'usersender id') OR (receiver ='usersender id' AND sender = 13)试试吧!

+0

这可以工作,但我可以看到我发送给其他人的消息以及他们回复的消息。我试图将它与所显示的两个人之间发送的最后一条消息进行一次对话。 – Josh

+0

放置限制1,1之后的命令 –

+0

我与其他人的对话不显示 – Josh