Я не могу обернуть голову вокруг небольшого (надеюсь) вопроса MySQL. У меня есть таблица, называемая ссылками. Он содержит поле customer_id и поле linked_id и в основном связывает счета клиентов друг с другом, в которых лидерство customer_id. Недавно созданные учетные записи могут создавать собственные учетные записи, и мне бы хотелось, чтобы все учетные записи были созданы зарегистрированным пользователем + все учетные записи, созданные субсчетами.MySQL получить связанные результаты из той же таблицы
Таблица выглядит следующим образом:
+----+-------------+-----------+
| id | customer_id | linked_id |
+----+-------------+-----------+
| 1 | 1 | 5 |
| 2 | 1 | 2 |
| 3 | 1 | 11 |
| 4 | 1 | 13 |
| 5 | 13 | 14 |
| 6 | 3 | 4 |
| 7 | 7 | 8 |
+----+-------------+-----------+
Так что, если я зарегистрирован как пользователь с Customer_ID 1, то я хотел бы получить список пользователей с linked_id 5,2,11,13 (потому что они являются прямыми соединение) и linked_id 14 (поскольку этот пользователь был создан пользователем, который напрямую связан с 1).
Запрос должен быть подзапросом, чтобы получить все данные пользователя. В настоящее время у меня есть:
SELECT username, firstname, lastname, email, active, level FROM customers WHERE id
IN (SELECT linked_id FROM links WHERE customer_id=1) or id=1;
Это, очевидно, только прямые прямые подключения и пользователя с id = 1 напрямую.
Вы хотите видеть только «детей» и «внуков»? Или все потомки, независимо от глубины? – eggyal
Я бы предпочел, чтобы все потомки были независимо от глубины, поэтому, если пользователь с идентификатором 14 создает новые дочерние элементы, они также должны быть перечислены под «основным» идентификатором с помощью 1 – lleto
. Затем вам потребуется MySQL для прохождения вашей существующей модели данных, которая известный как «список смежности *», рекурсивно; однако, в отличие от некоторых других СУБД, MySQL не поддерживает рекурсивные функции. Если возможно, вы можете подумать о ремоделировании для использования другой структуры данных, такой как «* вложенные наборы *» или «* транзитивное закрытие *». – eggyal