我正在构建消息/回复应用程序。想法是显示一条消息,并在隐藏的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注入的大门!