Есть ли способ решить эту проблему с помощью какого-то рекурсивного SQL-запроса (MySQL) вместо того, чтобы делать это программно.
У меня есть две таблицы, одна содержит идентификатор пакета и имя, другая содержит идентификатор пакета и parent_id, который также является ссылкой на идентификатор какого-либо другого пакета. Что мне нужно сделать, это получить список всех идентификаторов пакетов, которые содержат какой-то конкретный пакет.
Ниже приведен пример таблиц и желаемого результата, если я ищу пакет с идентификатором 8. Пакет 8 является частью пакетов 5 и 6, но пакет 6 является частью пакетов 1 и 4. Итак, мне нужны все это идентификаторы как массив (1,4,5,6).
таблица пакетов:
+----+-----------+
| id | name |
+----+-----------+
| 1 | package 1 |
| 2 | package 2 |
| 3 | package 3 |
| 4 | package 4 |
| 5 | package 5 |
| 6 | package 6 |
| 7 | package 7 |
| 8 | package 8 |
+----+-----------+
часть_ таблицы:
+----+-----------+
| id | parent_id |
+----+-----------+
| 6 | 1 |
| 6 | 4 |
| 8 | 5 |
| 8 | 6 |
+----+-----------+
выход:
+----+
| id |
+----+
| 1 |
| 4 |
| 5 |
| 6 |
+----+
РЕДАКТИРОВАТЬ: Чтобы объяснить немного лучше, о чем все это было. Эта таблица пакетов на самом деле является таблицей автомобильных запчастей, которая также включает цену и многие другие поля. Если мы ищем часть «ремня ГРМ», она может быть автономной, может быть частью какого-то комплекта, мы называем ее «комплект ремня ГРМ» или может быть частью «полного сервиса» в мастерской. Все они, «ремень ГРМ», «комплект ремня ГРМ», «полный сервис», хранятся в одной таблице. Теперь, когда клиент приходит с просьбой о «ремне ГРМ», я могу предложить ему отдельно за 50 $ или в комплекте за 150 $, или я могу предложить полный сервис за 250 $. Все они включают «ремень ГРМ», который он просил.