Php MySQL自连接以获取有序的父子记录
我有一个具有以下结构的表:Php MySQL自连接以获取有序的父子记录,php,mysql,hierarchical-data,self-join,Php,Mysql,Hierarchical Data,Self Join,我有一个具有以下结构的表: +-----------+--------------+-----------+----------+ | member_id | household_id | firstName | lastName | +-----------+--------------+-----------+----------+ | 14122 | 0 | Cynthia | Bookout | +-----------+--------------+
+-----------+--------------+-----------+----------+
| 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 |
+-----------+--------------+-----------+----------+
成员id
和家庭id
对于某些记录具有父子关系。例如,带有成员id
14124的记录是成员id
14122的子记录(即,其家庭id
是其父项的成员id
)
该表实际上包含数千条不按顺序排列的记录。我希望显示它们,以便父记录后面跟着它的子记录,然后显示下一个父记录及其子记录,依此类推。结果也需要按成员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
这不是我想要的!我希望父记录后跟子记录,每个记录在不同的行中。