有没有办法从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";
凌乱的方式很好用,但是我感到有机会在这里学习一些东西,所以我想我应该提出这个问题。
怎么样:
$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";