Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于PHP/MySQL的消息传递系统_Php_Mysql_Messaging - Fatal编程技术网

基于PHP/MySQL的消息传递系统

基于PHP/MySQL的消息传递系统,php,mysql,messaging,Php,Mysql,Messaging,嗨,我正在尝试用php和mysql制作一个消息传递系统 mysql表很简单: 身份证件 发件人 接受者 文本 时间戳 我正在尝试使消息有点像Facebook/Twitter,因此列表位于“对话”中,并查看对话中的最后一条消息 这就是我的atm机: (SELECT * FROM messages WHERE receiver = 13 OR sender = 13 GROUP BY receiver,sender ORDER BY id ASC) ORDER BY id ASC 更新: 我不确定

嗨,我正在尝试用php和mysql制作一个消息传递系统

mysql表很简单: 身份证件 发件人 接受者 文本 时间戳

我正在尝试使消息有点像Facebook/Twitter,因此列表位于“对话”中,并查看对话中的最后一条消息

这就是我的atm机:

(SELECT * FROM messages WHERE receiver = 13 OR sender = 13 GROUP BY receiver,sender ORDER BY id ASC) ORDER BY id ASC
更新: 我不确定它是否完美:

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

使用
DESC
获取新行,默认值为
ASC

   (SELECT * FROM messages WHERE receiver = 13 OR sender = 13 GROUP BY receiver,sender ORDER BY id DESC)
并在ORDER BY之后设置1,1

我想你需要

(接收方='{接收方id}'和发送方='{发送方id}')或(接收方='{发送方id}'和发送方='{接收方id}')


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

您可以在按关键字分组后按desc进行尝试。问题是我正在查看多个对话。我只需要查看每人1封,并查看对话中发送的最后一封邮件。您可以在ORDERTrue之后使用LIMIT 1,但这样我就看不到与其他人的对话。您能解释更多吗?因为我不明白你的意思,这是可行的,但我可以看到我发给别人的信息和他们回复的信息。我正试图使它成为显示的两个人之间发送的最后一条消息的一次对话。在我与其他人进行的按顺序对话未显示后设置限制1,1为任何聊天创建唯一会话,并为其设置
接收方
发送方
。但我的答案是可以的!将
receiver=13或sender=13
更改为
receiver=13
谢谢!这不是我的问题,但我一直在寻找同样的东西,这是完美的工作!
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