我开始为我的网站开发聊天应用程序。
首先,在进入后端之前,我做了一些 javascript 部分。 现在刚刚创建了数据库结构:
CREATE TABLE IF NOT EXISTS `wp_bp_my_chat` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`from` varchar(255) NOT NULL DEFAULT '',
`to` varchar(255) NOT NULL DEFAULT '',
`message` text NOT NULL,
`sent` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`recd` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `to` (`to`),
KEY `from` (`from`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
现在,有了这个数据库,我想发出请求以查看按“发件人”或“收件人”分组的所有消息
将其视为 Facebook 消息,当您进入实际页面时,有一个左侧边栏,其中包含按对话分组的消息。
输出应该是这样的:
2 小时前“user_1”和“user_2”之间的对话(未读)
3 小时前“user_1”和“user_3”之间的对话(未读)
5 小时前“user_1”和“user_5”之间的对话
所以我的消息像对话一样分组。 我可能有 10 条来自 user_2 的消息,但它应该显示为一条(以及最后一条的信息)
有什么想法我下一步该怎么走吗? 由于我还没有完成任何 php 方面的工作,您甚至可以建议更改数据库以调整您的解决方案。
谢谢。
最佳答案
我假设您会为一个人(“user_1”)的对话运行此命令,这意味着他们可以是发件人,也可以是收件人。我还认为,如果它们是从或到,都没有区别,但要根据对话中的其他人进行分组。如果是这样,请尝试这个。 (您应该在SQLFiddle中放入一些示例数据进行测试)
SELECT MostRecent.MainPerson AS MainPerson
, MostRecent.OtherPerson AS OtherPerson
, MostRecent.Sent AS Sent
, IF(wp_bp_my_chat.recd = 0, 'Unread','Read') AS Status
FROM wp_bp_my_chat
JOIN (
SELECT 'user_1' AS MainPerson
, IF(msgs.`from` = 'user_1',msgs.to, msgs.`from`) AS OtherPerson
, MAX(msgs.sent) AS sent
FROM wp_bp_my_chat AS msgs
WHERE msgs.`from` = 'user_1' OR msgs.`to` = 'users_1'
GROUP BY MainPerson, OtherPerson) AS MostRecent
ON (wp_bp_my_chat.`from` = MostRecent.MainPerson OR wp_bp_my_chat.`to` = MostRecent.MainPerson)
AND (wp_bp_my_chat.`from` = MostRecent.OtherPerson OR wp_bp_my_chat.`to` = MostRecent.OtherPerson)
AND MostRecent.sent = wp_bp_my_chat.sent
ORDER BY sent DESC
关于php - GROUP BY 消息 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19348155/