在我的資料庫中,我有一個用戶表,其中有一列帶有 User_ID,另一列帶有整個“樹”的路徑。
| 用戶身份 | 啟動子路徑 |
|---|---|
| 1200 | /200/840/780/1200 |
| 1785 | /14/74/787/898/1047/1687/1785 |
| 2687 | /2687 |
| ... | ... |
| 7847 | /200/840/780/ 1200 /5870/7847 |
| ... | ... |
如果我想知道 user_id 1200 有多少個孩子,我會這樣做:
select
max(user_id) as name,
count(*) as c
FROM users
where promoter_path like '00%'
我得到
| 名稱 | C |
|---|---|
| 1200 | 2 |
到目前為止,這很容易。但是,如果我想要所有 id 的串列,我該怎么辦?喜歡
| 名稱 | C |
|---|---|
| 1200 | 2 |
| 1785 | 1 |
| 5550 | 5 |
| 10287 | 1 |
| --- | --- |
select max(u.user_id) as name,
(
select count(*) from users as u1 where promoter_path like u.user_id
) as c
from users as u
但這行不通。
你能幫我么?
uj5u.com熱心網友回復:
失去max. 您還想%在 user_id 周圍添加like:
select u.user_id as name,
(
select count(*) from users where promoter_path like concat('%', u.user_id, '%')
) as c
from users as u
順便說一句,你確定它不應該是:
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 '00%'評估為真...
uj5u.com熱心網友回復:
SELECT
u1.id, COUNT(u2.id)
FROM users u1 LEFT JOIN users u2
ON
u2.promoter_path LIKE concat('%', u1.id, '%')
GROUP BY
u1.id;
它的作用是:
- 將每個用戶與
promoter_path包含其 id 的用戶配對(這可能是同一用戶的事件) - 計算與每個用戶配對的用戶數量
這LEFT JOIN很重要,所以我們也會得到沒有匹配的用戶。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/409067.html
標籤:
