在我的数据库中,我有一个用户表,其中一列为user_ID,另一列为整个"的路径;树";。
user_id | promoter_path |
---|---|
1200 | /200/840/780/1200|
1785 | /14/74/787/898/1047/1687/1785 |
2687 | /2687 |
7847 | /200/840/780/1200/5870/7847 |
失去max
。您还想在like
:中的user_id周围添加%
select u.user_id as name,
(
select count(*) from users where promoter_path like concat('%', u.user_id, '%')
) as c
from users as u
顺便问一下,OP,你确定它不应该是:
select u.user_id as name,
(
select count(*) from users
where promoter_path like concat('%/', u.user_id, '/%')
or promoter_path like concat('%/', u.user_id)
) as c
from users as u
因为'/11200/something' like '%1200%'
的计算结果为true。。。
SELECT
u1.id, COUNT(u2.id)
FROM users u1 LEFT JOIN users u2
ON
u2.promoter_path LIKE concat('%/', u1.id, '/%')
OR pomoter_path like concat('%/', u.user_id)
GROUP BY
u1.id;
它的作用是:
- 将每个用户与
promoter_path
包含其id的用户配对(这可能是同一用户的事件( - 统计与每个用户配对的用户数
LEFT JOIN
很重要,所以我们也会得到没有匹配项的用户。