问题
Hi I'm trying to make a messaging system with php and mysql.
The mysql table is simple: id sender receiver text timestamp
I'm trying to make the messaging somewhat like Facebook/Twitter so the list is in 'conversations' and the last message in the conversation is viewed.
This is what I have atm:
(SELECT * FROM messages WHERE receiver = 13 OR sender = 13 GROUP BY receiver,sender ORDER BY id ASC) ORDER BY id ASC
回答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
what you need is a unique conversation id between the chat-partners. i've simulated this with the subquery, hope this helps
回答2:
UPDAte: I'm not sure if it works perfect:
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
to reverse the order:
ORDER BY timestamp DESC
回答3:
DESC for receive New row's . AND ASC or NOT set, Default is ASC:
(SELECT * FROM messages WHERE receiver = 13 OR sender = 13 GROUP BY receiver,sender ORDER BY id DESC)
AND SET LIMIT 1 ,1 AFTER ORDER BY
i think you need it(receiver = 13 AND sender = 'usersender id' ) OR (receiver ='usersender id' AND sender = 13 ) Try it!
来源:https://stackoverflow.com/questions/21595925/messaging-system-with-php-mysql