0

我正在构建一个消息/回复应用程序。这个想法是显示一条消息,并且任何回复都直接显示在它下方的隐藏 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

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

4

1 回答 1

1

子帖子需要使用除主键之外的其他内容来引用其父帖子。您在 JOIN 中所做的操作将不起作用,因为主键总是不同的。

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

不要分组,否则你只会得到一个回复​​。

拜托,看在上帝的份上,$_GET在组合 SQL 语句时不要使用未经处理的变量!您将对 SQL 注入敞开心扉!

于 2013-02-11T14:36:37.220 回答