Этот вопрос основан на моем предыдущем вопросе о stackoverflow . На этот раз я пытаюсь создать URL-адреса для всех строк в таблице страниц, используя метод модифицированного дерева предзаказов.
Вот таблицы MySql: [Примечание: я добавил столбец «parent», чтобы зрители понимали отношения родитель-потомок в таблице категорий. Фактический модифицированный метод дерева предзаказов не использует родительский столбец (отношения родитель-потомок)]
Таблица категорий :
Таблица страниц
Я пытаюсь написать запрос mysql, который будет генерировать URL-адреса для всех строк в таблице страниц, используя таблицу категорий, создающую приведенный ниже результат.
Ожидаемые строки:
/content/article/array/oops/classes /content/article/array/oops/objects /content/article/php/index /content/article/php/quiz /content/article/php/strings/strstr /content/article/php/strings/str_substr /content/blog/something1 /content/blog/something2 /content/blog/java/test-java /content/blog/java/final-method /content/about-us /content/contact-us
Вот что я пробовал в таблице категорий, ссылаясь на « Управление иерархическими данными в MySQL» . В приведенном ниже запросе SQL извлекается единственный путь для заголовка «oops» в таблице категорий.
SELECT concat('/',group_concat(parent.title separator '/')) as url FROM category AS node, category AS parent WHERE node.lft BETWEEN parent.lft AND parent.rgt AND node.title = 'oops' ORDER BY parent.lft;
Что-то вроде этого должно быть достаточно …
SELECT CONCAT_WS('/',x.path,y.page_name) full_path FROM ( SELECT node.id, GROUP_CONCAT(parent.title ORDER BY parent.lft SEPARATOR '/') path FROM category node JOIN category parent ON node.lft BETWEEN parent.lft AND parent.rgt GROUP BY node.title ORDER BY node.lft ) x JOIN pages y ON y.category_id = x.id;