使用 MYSQL 和 PHP 在单个查询中从同一个表中的两条记录中选择数据

问题描述 投票:0回答:1

我有一个涉及 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

我是否走在正确的轨道上,或者您如何使用相同的查询两次点击一张桌子。感谢您的任何建议。

php sql mysql left-join union
1个回答
0
投票

美好的一天。首先,我想澄清一下我的思维过程是否正确。

您想要根据文章 ID 获取属于某个帖子的所有评论 如果是,您可以使用此 SQL 查询来获取属于该文章的所有评论。 主要标准是将评论和文章连接起来,然后将用户连接到评论,因为文章与评论是一对多的关系,而评论与评论是一对一的关系。

因此,使用左联接从文章中获取所有评论,并根据评论表上的用户 ID 将用户加入到评论中。

下面提供了示例代码和视觉效果

SELECT  A.id as 'itemid',
    A.text as 'body',
    A.pic as 'itempic',
    U.name as 'authorname',
    U.pic as 'authorpic',
    C.id as 'commentId',
    C.text as 'commentBody'

摘自文章 A LEFT JOIN 注释 AS C ON C.articleid = A.id 加入用户 AS U ON U.id =c.userid 其中 A.id = 1;

示例图像结果

您可以根据您的设计调整从查询中选取的值。我希望它有帮助。

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.