簡體   English   中英

從mysql的同一張表中獲取父子關系的所有數據

[英]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

sqlfiddle

如果你想找到所有的孩子,大孩子或一個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

sqlfiddle

獲取與給定記錄具有相同 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM