我正在构建消息/回复应用程序。想法是显示一条消息,并在隐藏的div中直接在其下方显示所有答复,并显示文本“ show message from ...”。

我对布局本身没有任何问题,并且可以正常工作,但是我不确定的是如何返回具有多个答复的单个消息。下面的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


就像我说的,我似乎得到了两个结果,一个将显示一条消息,并带有单个答复(如果我不使用group by)或所有答复,但会重复该消息。我敢肯定,这可以通过复杂的查询来完成,例如select中的select,但不胜感激。

最佳答案

子帖子需要使用主键以外的其他内容引用其父帖子。您在JOIN中所做的操作将无法正常工作,因为主键始终是不同的。

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

不要分组,否则只会收到一个答复。

而且,请为上帝的爱,在编写SQL语句时不要使用未经消毒的$_GET变量!您将打开SQL注入的大门!

09-16 23:15