我有一个涉及 JOINS 和 Union 语句的 MYSQL 查询,通过该查询我查询多个表以生成 JSON 提要。(我对 MYSQL 不太熟悉,因此提前致歉。)
我现在必须添加评论。如果评论是关于单独表中的内容(例如文章),那么您可以对这两个表进行 JOIN。
我遇到的问题是,如果评论是关于评论的,我需要来自 sambe 表的两行信息,即新评论第 2 行,以及新评论所涉及的原始评论第 1 行。我不知道如何在单个查询中从一个表的两行中获取数据。我希望有一种方法或其他策略可以做到这一点。
这是该查询的简化版本。
Articles
id|text|pic|authorid
Users
id|name|pic
Comments
id|articleid|userid|commentid|text
SELECT a.id as 'itemid',a.text as 'body',a.pic as 'itempic',u.name as 'authorname',u.pic as 'authorpic', nil as 'subtext'
FROM Articles `a`
LEFT JOIN
Users `u`
ON a.authorid = u.id
UNION
Select c.id as 'itemid',c.comment as 'body',nil as 'itempic',u.name as 'authorname',u.pic as 'authorpic', cm.text as 'subtext'
FROM COMMENTS `c`
/* THIS APPROACH DOES NOT SEEM TO WORK *?
LEFT JOIN
COMMENTS `cm`
ON cm.id = c.id
/* end approach */
LEFT JOIN
Users `u`
ON c.userid = u.id
WHERE c.articleid = a.id
GROUP by itemid
我这样做是否正确?或者您如何用相同的查询两次访问同一个表?感谢您的任何建议。
你好。首先,我想澄清一下我是否理解了你的思维过程。
您想根据文章 ID 获取属于某篇文章的所有评论,如果是,您可以使用此 SQL 查询获取属于该文章的所有评论。主要标准是将评论和文章连接起来,然后将用户与评论连接起来,因为文章与评论具有一对多关系,而评论与用户具有一对一关系。
因此,使用左连接从文章中获取所有评论,并根据评论表上的用户 ID 将用户加入到评论中。
示例代码和视觉效果如下
示例图像结果
您可以根据您的设计调整从查询中选择的值。希望对您有所帮助。
谢谢