У меня есть 2 таблицы:
категории
id | name | | slug | path | parent_id | depth
1 name1 slug1 {1} null 0
2 name2 slug2 {1,2} 1 1
3 name3 slug3 {1,2,3} 2 2
5 nam5 slug5 {5} null 0
......
9 nam4 slug9 {5,9} 5 1
где путь имеет тип int[]array
и работает как крошка
предметов
id | name
1 name1
Между элементом и категорией существует отношение M2M
item_categories
id | item_id | category_id
1 1 | 3
2 1 9
В приведенном выше примере товар относится к 3 категориям:
Я использую следующий SQL:
SELECT c1.id, c1.name, c1.slug, c1.parent_id FROM categories AS c1
WHERE ARRAY[c1.id] <@ (SELECT c2.path FROM categories AS c2 WHERE c2.id=
(SELECT category_id FROM item_categories WHERE item_id=8 LIMIT 1)) order by depth
для извлечения основы крошки на пути, и это работает.
Но я хочу получить все сухарики (не одну). Удаление LIMIT 1
и изменение = to in
Я получу массив массивов, а не просто массив, и вызовет ошибку:
более одной строки, возвращенной подзапросом, использованным в качестве выражения
что нормально.
Пример того, что я хочу - Элемент в:
cat1 - > cat2 - >cat3
ca5 -> cat9
и из базы данных (чтобы я мог зациклить их):
[ [{'name':cat1, 'slug':slug1}, {'name':cat2, 'slug':slug2}, {'name':cat3, 'slug':slug3}], [{'name':cat5, 'slug':slug5}, {'name':cat9, 'slug':slug9}]]
dbfiddle: https://dbfiddle.uk/?rdbms=postgres_10&fiddle=f756cfe568d38425dfe25cfec60b1b3f
Таким образом, вместо получения одной крошки, как я могу получить массив с панировочными сухарями в результате?