How do I specify the parent query field from within a subquery in MySQL?

For Example:
I have written a basic Bulletin Board type program in PHP.

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

我正在try 编写一个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作为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";

这种混乱的方式很好,但我觉得有机会在这里学到一些东西,所以我想我应该发布这个问题.

推荐答案

怎么样:

$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上加了个别名.你可能会说:

$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";

Mysql相关问答推荐

如何根据mysql中的用户组获取文档?

无法连接到扩展坞MySQL Unix套接字

Mysql - Select 匹配某些条件的两条记录之间经过的最大天数

使用mysql查询获取不关注user1的user3

使用 SELECT 时应锁定多少行 .. FOR UPDATE LIMIT 1

如何在 Shopware 6 DAL 中实施 Haversine 公式?

0000-00-00 00:00:00 表中的日期设置为 NOT NULL

MySQL 1292 截断不正确的日期时间值:'2020-09-11T08:32-50Z'

根据使用 mysql 的第一个过滤结果添加更多表行

如何使用同一个表在 2 个字段上左连接

非常规字符的不正确字符串值错误

如何在 SQL 的计算列中显示小数点后两位?

如何将表的链接列转换为 SQL 中的行?

如何在 Windows 上访问 xampp 的命令行

试图获取非对象的属性

如何在mysql中连接整数(整数和整数)和varchar(nvarchar和varchar)等数据类型?

为什么数据库行元组中的整数具有L后缀?

Mysql中int(10)的最大大小是多少

如何让mysql自动启动? (仅限 linux-cli)

电话号码和地址的mysql数据类型