[英]Get all data of parent child relation-ship from same table in mysql
我正在嘗試獲取滿足父子關系的所有行。 例如
id Title parent_id
1200 A 1000
1201 B 1000
1202 C 1000
1203 D 1000
1204 E 1200
1205 F 1200
1206 G 1201
1207 H 1205
1208 I 1205
1209 J 1205
現在我有 1209 id,我想檢索滿足 1209 父子關系的所有行。像這里 1209 與 1205 相關,1205 與 1200 相關,1200 與 1000 相關。
我試過這個查詢
SELECT * FROM `category` a left join category b on a.id=b.parent_id where a.id=1209
但這只給我一個記錄。 我們正在嘗試獲取此關系中的所有行。
如果你只是尋找它的父母,祖父母,偉大的父母,你可以使用這樣的東西。
SELECT id,title,parent_id FROM
(SELECT id,title,parent_id,
CASE WHEN id = 1209 THEN @id := parent_id
WHEN id = @id THEN @id := parent_id
END as checkId
FROM Test
ORDER BY id DESC) as T
WHERE checkId IS NOT NULL
如果你想找到所有的孩子,大孩子或一個id的大孩子,你可以使用它
SELECT id,title,parent_id FROM
(SELECT id,title,parent_id,
CASE WHEN id = 1200 THEN @idlist := CONCAT(id)
WHEN FIND_IN_SET(parent_id,@idlist) THEN @idlist := CONCAT(@idlist,',',id)
END as checkId
FROM Test
ORDER BY id ASC) as T
WHERE checkId IS NOT NULL
查詢找到多個孩子的所有父母/祖父母/曾祖父母
SELECT id,title,parent_id FROM
(SELECT id,title,parent_id,
CASE WHEN id in (1209,1206) THEN @idlist := CONCAT(IFNULL(@idlist,''),',',parent_id)
WHEN FIND_IN_SET(id,@idlist) THEN @idlist := CONCAT(@idlist,',',parent_id)
END as checkId
FROM Test
ORDER BY id DESC)T
WHERE checkId IS NOT NULL
獲取與給定記錄具有相同 parent_id 的其他記錄
為了獲得我所屬的同一家公司的其他分支機構的所有回報(由表中的相同parent_id
)我使用這個:
SELECT *
FROM `sale_return` RET
WHERE RET.`fk_contact_id` IN (
SELECT OTHERS.`contact_id`
FROM `contact` ME
INNER JOIN `contact` OTHERS
ON ME.`parent_id` = OTHERS.`parent_id`
WHERE ME.`contact_id` = $customer_id
)
希望它可以幫助你們中的一些人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.