[英]MySQL self join to get ordered parent-child records
我有一個具有以下結構的表:
+-----------+--------------+-----------+----------+
| member_id | household_id | firstName | lastName |
+-----------+--------------+-----------+----------+
| 14122 | 0 | Cynthia | Bookout |
+-----------+--------------+-----------+----------+
| 14123 | 0 | Kim | Caves |
+-----------+--------------+-----------+----------+
| 14124 | 14122 | Marvin | Bookout |
+-----------+--------------+-----------+----------+
| 14125 | 13974 | Stacey | Webb |
+-----------+--------------+-----------+----------+
| 14126 | 13974 | Nathan | Webb |
+-----------+--------------+-----------+----------+
| 14127 | 13974 | Adam | Webb |
+-----------+--------------+-----------+----------+
| 14128 | 13974 | Thomas | Webb |
+-----------+--------------+-----------+----------+
| 14129 | 0 | Missy | Hammock |
+-----------+--------------+-----------+----------+
| 14130 | 0 | Stephanie | Lewis |
+-----------+--------------+-----------+----------+
| 14131 | 0 | Kelly | Hutto |
+-----------+--------------+-----------+----------+
| 14132 | 14130 | James | Lewis |
+-----------+--------------+-----------+----------+
| 14133 | 0 | Cindy | Barnwell |
+-----------+--------------+-----------+----------+
| 14134 | 13828 | NATALIE | MCMILLAN |
+-----------+--------------+-----------+----------+
| 14135 | 13828 | Steven | Adams |
+-----------+--------------+-----------+----------+
| 14136 | 0 | Katherine | Gaskins |
+-----------+--------------+-----------+----------+
member_id
和household_id
對某些記錄的父子關系。 例如,記錄member_id
14124是孩子member_id
14122(即其household_id
是member_id
其父的)。
該表實際上包含數以千計的無序記錄。 我想顯示它們,以便父項后跟其子記錄,然后出現下一個父項及其子記錄,依此類推。 結果也需要按member_id
排序。
我試過這個:
SELECT * FROM members WHERE household_id IN (SELECT member_id FROM members WHERE household_id = 0) OR household_id = 0
ORDER BY member_id
但我沒有得到想要的結果。 使用 PHP 以編程方式執行此操作花費的時間太長,因為我必須多次迭代每條記錄。
這是我想要的結果:
+-----------+--------------+--------------+----------+
| member_id | household_id | firstName | lastName |
+-----------+--------------+--------------+----------+
| 14122 | 0 | Cynthia | Bookout |
+-----------+--------------+--------------+----------+
| 14124 | 14122 | Marvin Keith | Bookout |
+-----------+--------------+--------------+----------+
| 14123 | 0 | Kim | Caves |
+-----------+--------------+--------------+----------+
| 14125 | 13974 | Stacey | Webb |
+-----------+--------------+--------------+----------+
| 14126 | 13974 | Nathan | Webb |
+-----------+--------------+--------------+----------+
| 14127 | 13974 | Adam | Webb |
+-----------+--------------+--------------+----------+
| 14128 | 13974 | Thomas | Webb |
+-----------+--------------+--------------+----------+
| 14129 | 0 | Missy | Hammock |
+-----------+--------------+--------------+----------+
| 14130 | 0 | Stephanie | Lewis |
+-----------+--------------+--------------+----------+
| 14132 | 14130 | James | Lewis |
+-----------+--------------+--------------+----------+
| 14131 | 0 | Kelly | Hutto |
+-----------+--------------+--------------+----------+
| 14133 | 0 | Cindy | Barnwell |
+-----------+--------------+--------------+----------+
| 14134 | 13828 | NATALIE | MCMILLAN |
+-----------+--------------+--------------+----------+
| 14135 | 13828 | Steven | Adams |
+-----------+--------------+--------------+----------+
| 14136 | 0 | Katherine | Gaskins |
+-----------+--------------+--------------+----------+
嘗試以下查詢:
SELECT a.member_id as parent_id,
a.firstName as parent_firstName,
a.lastName as parent_lastName,
b.member_id as child_id,
b.firstName as child_firstName,
b.lastName as child_lastName
FROM members a inner join members b on a.member_id = b.household_id
ORDER BY a.member_id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.