PHP和MySQL中的分层消息/回复

时间:2013-02-11 14:11:35

标签: php mysql

我正在构建一个消息/回复应用程序。我们的想法是显示一条消息,任何回复都会直接显示在隐藏的div中,并显示“显示来自...的消息”。

我对布局本身没有任何问题并且工作正常,但我不确定的是,如何返回带有多个回复的单个消息。下面的SQL查询是我的日期,但这将返回所有回复,但也会为每个回复重复主要消息。

我的问题是,如何返回主消息一次,以及所有相关的回复?

SELECT u.userid, u.first, u.last, c.title, c.body, c.messid, 
   c.adddate, ru.first, ru.last, cr.body, cr.messreplyid 
FROM chat c INNER JOIN users u on u.userid = c.userid 
 LEFT JOIN chat_reply cr on cr.messid = c.messid 
 LEFT JOIN users ru on ru.userid = cr.userid 
WHERE c.messid =".$_GET['messid']." 
GROUP BY cr.messreplyid"


u.userid = the original posters primary key
u.first + u.last = the original posters name
c.title = the title of the post
c.body = the message body
c.messid = the message primary key
c.adddate = message timestamp
ru.first + ru.last = the name of the person who replied
cr.body = the the reply message body
cr.messreplyid = the reply primary key

正如我所说,我似乎得到两个结果,一个将显示单个回复的单个回复(如果我不使用该组)或所有回复但重复该消息。我确信这可以通过复杂的查询来完成,例如select中的select,但是会感激任何帮助。

1 个答案:

答案 0 :(得分:1)

子帖子需要使用除主键之外的其他内容来引用其父帖子。你在JOIN中所做的事情是行不通的,因为主键总是不同的。

例如,如果孩子的messreplyid包含父级的messid,则可以LEFT JOIN chat_reply cr on cr.messreplyid = c.messid

不要进行分组,否则您只会收到一个回复​​。

并且,为了上帝之爱,请不要在汇总SQL语句时使用未经过验证的$_GET变量!您将打开SQL注入!