Поиск всех непустых категорий в дереве - PullRequest
0 голосов
/ 31 августа 2010

У меня есть таблица категорий, настроенная так [id, name, parent_id] и таблица элементов [id, name, category_id, visible]. То, что я пытаюсь сделать, - это создать запрос, который будет возвращать все идентификаторы всех непустых категорий, непустыми, поскольку он или один из его дочерних элементов имеет хотя бы один принадлежащий ему элемент. Что было бы лучшим способом сделать это в MySQL?

редактировать

ВЫБРАТЬ DISTINCT category_id ИЗ элементов

Это работает для категорий, содержащих элементы, но мне также нужны родительские категории для всех элементов, содержащих категории. Этот запрос будет использоваться как подзапрос вместе с некоторыми другими фильтрами.

Категория верхнего уровня

-> Категория второго уровня

-> Категория третьего уровня

---> Пункт 1

---> Пункт 2

Ответы [ 2 ]

1 голос
/ 31 августа 2010

Может быть, не по теме, но я думаю, что все же стоит сослаться на: Обширная статья об управлении иерархическими данными в MySQL .

1 голос
/ 31 августа 2010

Все непустые категории, и только те, имеют элементы с category_id, указывающими на них, поэтому вы можете просто выбрать category_id s из таблицы элементов:

SELECT DISTINCT category_id FROM Items

Насколько я знаюВы не можете выбрать всех предков этих категорий в одном запросе, однако, возможно, вы захотите использовать другую древовидную модель.

С моделью вложенного набора ваш запрос может выглядеть следующим образом:

SELECT DISTINCT c.id FROM Categories c JOIN Items ON c.id = category_id JOIN Categories ancestors ON c.lft BETWEEN ancestors.lft AND ancestors.rgt

Я не уверен, что это сработает, но вы можете попробовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...