需求场景:
需要统计同一张表中自关联数据(id与父类id)父类下级有多少个,常见上下级关系,树形关联等
第一种写法(子查询)
思路:按照程序逻辑理解的话,就是先查询出来列表然后循环列表对应查询父类id的下级总数
SELECT
id,
username,
( SELECT COUNT( u_sub.id ) FROM `sxo_user` AS u_sub WHERE u_sub.referrer = u.id ) AS referrer_count
FROM
`sxo_user` AS u
WHERE
1
ORDER BY
referrer_count DESC,
id ASC
第二种写法(关联查询)
思路:利用数据库A表id关联B表存储的上级id(此处必须为有关系的关联id)统计B表有关联不为NULL的id总数即为上级总数。必须对A表的id进行分组。
SELECT
u1.id,
u1.username,
COUNT( u2.id ) AS referrer_count
FROM
`sxo_user` AS u1
LEFT JOIN `sxo_user` AS u2 ON u1.id = u2.referrer
WHERE
1
GROUP BY
u1.id
ORDER BY
referrer_count DESC,
u1.id ASC
完。