小编典典

如何在MySQL的子查询中指定父查询字段?

mysql

有没有办法从mySQL的子查询中指定父查询字段?

例如:
我已经用PHP编写了一个基本的公告板类型程序。

在数据库中,每个帖子都包含:id(PK)和parent_id(父帖子的ID)。如果帖子本身是父项,则其parent_id设置为0。

我正在尝试编写一个mySQL查询,该查询将查找每个父级帖子以及父级拥有的子级数。

$query = "SELECT id, (
      SELECT COUNT(1) 
      FROM post_table 
      WHERE parent_id = id
) as num_children
FROM post_table
WHERE parent_id = 0";

棘手的是,第一个 ID 不知道它应该引用子查询之外的第二个 ID 。我知道我可以执行SELECT id AS
id_tmp,然后在子查询中引用它,但是如果我还想返回ID并保持“ id”作为列名,那么我就必须执行一个返回我两列具有相同的数据(对我来说似乎很混乱)

$query = "SELECT id, id AS id_tmp, 
            (SELECT COUNT(1)
            FROM post_table
            WHERE parent_id = id_tmp) as num_children
         FROM post_table
         WHERE parent_id = 0";

凌乱的方式很好用,但是我感到有机会在这里学习一些东西,所以我想我应该提出这个问题。


阅读 1508

收藏
2020-05-17

共1个答案

小编典典

怎么样:

$query = "SELECT p1.id, 
                 (SELECT COUNT(1) 
                    FROM post_table p2 
                   WHERE p2.parent_id = p1.id) as num_children
            FROM post_table p1
           WHERE p1.parent_id = 0";

或者,如果您在p1.id上放置一个别名,您可能会说:

$query = "SELECT p1.id as p1_id, 
                 (SELECT COUNT(1) 
                    FROM post_table p2 
                   WHERE p2.parent_id = p1.id) as num_children
            FROM post_table p1
           WHERE p1.parent_id = 0";
2020-05-17