Запрос предметов из категории - PullRequest
1 голос
/ 27 мая 2020

DB noob здесь. Мне нужны были категории с многоуровневыми вложенными (может быть, от 3 до 4) категорий. например: Одежда> Мужская одежда> Летняя одежда

Итак, я сделал таблицу рекурсивных категорий.

+---------------------------------+
| CATEGORIES                      |
+---------------------------------+
| id <PK>                         |
| parent_id <FK -> CATEGORIES.id> |
| name                            |
+---------------------------------+

+-----------------------------------+
| ITEMS                             |
+-----------------------------------+
| id <PK>                           |
| category_id <FK -> CATEGORIES.id> |
| name                              |
+-----------------------------------+

Проблема в том, что я не знаю, как запросить все предметы под 1-м уровнем родительской категории.

Например, ITEM 1 находится ниже 2-го уровня, Men's clothing (id: 2) и ITEM 2 находится ниже 3-го уровня, Summer wears (id: 3).

Я хочу увидеть все ITEM 1 и ITEM 2 когда я запрашиваю элементы под Clothing (id: 1), который является родительским для Men's clothing и Summer wears.

Как мне это сделать?

Стек: Node.js, Postgres, Knex . js, TypeScript

.

1 Ответ

0 голосов
/ 27 мая 2020

Вы можете использовать рекурсивный запрос для перечисления всех дочерних элементов вашей входной категории, а затем использовать его для фильтрации элементов:

with recursive cats as (
    select id from categories where name = ?
    union all
    select c.id 
    from categories c
    inner join cats p on p.id = c.parent_id
)
select i.*
from items i
inner join cats c on c.id = i.category_id

Знак вопроса следует заменить на имя (родителя) категория, элементы которой вы хотите выставить (в вашем примере это будет 'Clothing ').

...