MySQL самостоятельно соединяется, чтобы получить упорядоченные записи родитель-потомок - PullRequest
0 голосов
/ 31 января 2019

У меня есть таблица со следующей структурой:

+-----------+--------------+-----------+----------+
| 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 (т. Е. Ее Идентификатор_домена - это 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  |
+-----------+--------------+--------------+----------+

1 Ответ

0 голосов
/ 02 февраля 2019

Попробуйте следующий запрос:

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

query_output

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...