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生成的整型计算可以为空吗?

SQL计算不同的列并返回所有行

MySQL:统计单词在单元格中出现的次数,并将数字放在bra中单词的旁边

我可以指示MariaDB-Install-db和MariaDB忽略配置中的用户设置吗?

MySQL-如何检测时间戳中的一天

PythonAnywhere中SSH到MySQL数据库无限期挂起,SSH正确,workbench可以完美连接

在MySQL查询中查找和替换表内的值

在两个日期之间生成每个月的1行数据.

为生日创建 MySQL 索引

如何同时从同一个表中 Select 从 SQL 表中删除行

如何查找列的所有值都相同的行?

将 Go var 传递给 MySQL - try 在 Go lang 程序 (MySQL db) 中执行 db.Exec 时出错

使用另一个表中的值更新一个表中的值

在 Presto Athena 中将字符串转换为数组

Over() 函数不覆盖表中的所有行

将相同的固定值插入多行

MySQL ORDER BY rand(),名称为 ASC

在 MySQL 中仅 Select 仅包含字母数字字符的行

在 PHP 中运行 MySQL *.sql 文件