[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: MySQL вытащить всё до родителя
littleman
Как можно Join(ом) вытащить всё до родителя ?
+----+--------------+------------------------------------------------------------------------------- -+----+------------------------------------------+
| id | catalogue_id | name
+----+--------------+------------------------------------------------------------------------------- -+----+------------------------------------------+
| 1 | null | Телевизор
| 2 | 1 | плазменный телевизор LG 42PA4510
| 3 | null | Авто
| 4 | 1| ЖК-телевизор Samsung 46P5537T
| 5 | 3| Магнитола сайнг-Ёнгс
| 6 | 4| Провод HDMI
+----+--------------+------------------------------------------------------------------------------- -+----+------------------------------------------+
Как сделать запрос до родителя ? От провода HDMI до телевизора ?
Провод ссылаеться на телевизор ЖК-телевизор Samsung 46P5537T а ТВ на раздел NULL Телевизор .

redreem
можно предложить хардхак, если ограничить глубину вложенности :)

допустим для 5 уровней:

select 
l1.id, l1.catalogue_id, l1.name,
l2.id, l2.catalogue_id, l2.name,
l3.id, l3.catalogue_id, l3.name,
l4.id, l4.catalogue_id, l4.name,
l5.id, l5.catalogue_id, l5.name
from cat as l5
left join cat as l4 on l4.id = l5.catalogue_id
left join cat as l3 on l3.id = l4.catalogue_id
left join cat as l2 on l2.id = l3.catalogue_id
left join cat as l1 on l1.id = l2.catalogue_id
where
l5.id = 6


а так, в mysql нет нативных методов работы с древовидным структурами.
littleman
redreem
А можно как нибудь узнать сколько вложений ? Я к примеру изначально не знаю , если к приму я буду знать сколько в БД вложение (определенного товара) то можно сделать запрос .
Ещё мысль сделать рекурсию .
redreem
littleman

так после верхнего уровня в результатах запроса пойдут null-ы.
Например в твоем варианте 3-й уровень.
после запроса мы получим:

l1.id = null, l1.catalogue_id = null, l1.name = = null
l2.id = null, l2.catalogue_id = null, l2.name = null
l3.id = 1, l3.catalogue_id = null, l3.name = ...
l4.id = 4, l4.catalogue_id = 1, l4.name = ...
l5.id = 6, l5.catalogue_id = 4, l5.name = ...

сделали запрос, анализируем, в каком поле пошел нулл. В нашем случае в l3.
Раз запрос настроен на максимальную глубину = 5, то 5-3=2 (уровень провода ХДМИ, если считать с нуля).
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.