嗨我试图使用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
嗨我试图使用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
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。我用子查询模拟了这个,希望这有助于
谢谢!这不是我的问题,但我一直在寻找同样的东西,而且这个工作非常完美! – ShoeLace1291
更新: 我不知道,如果它完美的作品:
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
问题是我正在查看多个对话。我需要仅查看每个人1并查看通话中发送的最后一条消息。 – Josh
您可以在使用ORDER – user3106988
之后使用LIMIT 1,但我不会看到与其他人的对话。 – Josh
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)
试试吧!
你可以按关键字分组后按desc尝试。 – jeeva