我正在构建一个消息/回复应用程序。我们的想法是显示一条消息,任何回复都会直接显示在隐藏的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,但是会感激任何帮助。
答案 0 :(得分:1)
子帖子需要使用除主键之外的其他内容来引用其父帖子。你在JOIN中所做的事情是行不通的,因为主键总是不同的。
例如,如果孩子的messreplyid
包含父级的messid
,则可以LEFT JOIN chat_reply cr on cr.messreplyid = c.messid
不要进行分组,否则您只会收到一个回复。
并且,为了上帝之爱,请不要在汇总SQL语句时使用未经过验证的$_GET
变量!您将打开SQL注入!