Php 用于在一个表中显示和排序消息及其回复的SQL
我已经为我正在开发的CMS编写了一个简单的消息传递系统,我很难找到最好的方法来获取最新的消息及其回复(消息或回复) 我有一个名为“messages”的表,其中包含以下字段: *id,活动[1,0],主题,消息,日期时间,用户自,用户至,回复id* 这完全是直截了当的,对于主要级别的消息,*reply_id*为空,并且包含回复的父id。我不知道如何编写SQL来根据它们自己和它们的回复以datetime DESC顺序获取所有主要级别的消息。我相信这是通过某种形式的联合完成的,但我的SQL技能还不够。如果同样的选择可以给出每个主要级别消息中的回复数量,那将是惊人的Php 用于在一个表中显示和排序消息及其回复的SQL,php,mysql,sorting,messaging,Php,Mysql,Sorting,Messaging,我已经为我正在开发的CMS编写了一个简单的消息传递系统,我很难找到最好的方法来获取最新的消息及其回复(消息或回复) 我有一个名为“messages”的表,其中包含以下字段: *id,活动[1,0],主题,消息,日期时间,用户自,用户至,回复id* 这完全是直截了当的,对于主要级别的消息,*reply_id*为空,并且包含回复的父id。我不知道如何编写SQL来根据它们自己和它们的回复以datetime DESC顺序获取所有主要级别的消息。我相信这是通过某种形式的联合完成的,但我的SQL技能还不够。
任何帮助都将不胜感激 时间很晚了,我很累,但我想你可以试试这样的东西:
SELECT main.*, COUNT(reply.id) AS cnt_replies, MAX(reply.datetime) AS max_datetime
FROM posts AS main
LEFT JOIN posts AS reply
ON main.id = reply.reply_id
GROUP BY main.id
HAVING main.reply_id IS NULL
ORDER BY max_datetime DESC
编辑:固定查询EDIT2:现在包括没有任何回复的邮件时间很晚了,我很累,但我想你可以试试这样的方式:
SELECT main.*, COUNT(reply.id) AS cnt_replies, MAX(reply.datetime) AS max_datetime
FROM posts AS main
LEFT JOIN posts AS reply
ON main.id = reply.reply_id
GROUP BY main.id
HAVING main.reply_id IS NULL
ORDER BY max_datetime DESC
编辑:固定查询EDIT2:现在包含没有任何回复的邮件非常感谢您,这看起来非常完美。。。但有一个问题:main.id指的是什么?我得到了这个错误:
where子句中的未知列'main.id'
@cbh抱歉,我相应地编辑了我的答案。如果效果更好,请告诉我。干杯@非常感谢你,这正是我所需要的@实际上,此查询不包括没有回复的邮件。。。hmm@cbh你说得对!查看我的答案,我刚刚编辑了查询。将替换为NULL
替换为=0
,具体取决于您使用的内容。非常感谢您,这看起来非常完美。。。但有一个问题:main.id指的是什么?我得到了这个错误:where子句中的未知列'main.id'
@cbh抱歉,我相应地编辑了我的答案。如果效果更好,请告诉我。干杯@非常感谢你,这正是我所需要的@实际上,此查询不包括没有回复的邮件。。。hmm@cbh你说得对!查看我的答案,我刚刚编辑了查询。替换为空
为=0
,具体取决于您使用的内容。