выбрать категории детей в MySQL - PullRequest
0 голосов
/ 03 сентября 2011

У меня есть вложенные категории. это структура.

CREATE TABLE 'category' (
  'id' INT,
  'title' VARCHAR(50),
  'category_id' INT,
)

отношение просто

(идентификатор, родительский идентификатор)

main (1, NULL)
--parent (2, 1)
----child1 (3, 2)
----child2 (4, 2)
--foo (5, 1)
----baz (6, 5)
--bar (7, 1)

Я хочу выбрать категорию детей (MYSQL)

для категории "родитель" это "child1" и "child2"

для "основной" категории это:

--parent (2, 1)
----child1 (3, 2)
----child2 (4, 2)
--foo (5, 1)
----baz (6, 5)
--bar (7, 1)

спасибо!

Ответы [ 2 ]

0 голосов
/ 03 сентября 2011

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

SELECT *....
    FROM category AS level1
    LEFT JOIN category AS level2 ON (c2.category_id = c1.id)
    LEFT JOIN category AS level3 ON (c3.category_id = c2.id)
    ...
WHERE c1.category_id = 0

если у вас нет ограничений на количество детей, которых вы можете:

  1. написать рекурсивную функцию mysql
  2. извлекает все данные mysql и устанавливает соответствие родительский / дочерний в соответствии с программой. язык (то есть php)
  3. где-то сохранить (если у вас где-то есть таблица конфигурации) количество уровней, которые у вас есть, и реализовать генератор строк запроса, который создает строку запроса для заданного количества уровней. при каждом обновлении / вставке вы должны проверять, изменяется ли количество уровней, и сохранять его
0 голосов
/ 03 сентября 2011

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

Редактировать: я обнаружил, что статья о проектах кода, которые похожи на вашу реализацию.

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