mysql-запрос для создания дружественного URL-адреса SEO из данной структуры таблицы

Я пытаюсь создать дружественные URL-адреса SEO, используя следующие таблицы:

Таблица категорий

категория

Таблица страниц

таблица страниц

Я пытаюсь написать запрос mysql, который будет генерировать URL-адреса для всех страниц в таблице страниц, используя таблицу категорий, создающую приведенный ниже результат.

Ожидаемый вывод:

ожидаемый

Вот запрос MySql, который я пытался создать для URL-адресов до 4-х сегментов:

SELECT pg.id AS page_id, p3.id, p1.category AS segment1, p2.category AS segment2, p3.category AS segment3, pg.page_name AS PAGE , concat( '/', p1.category, '/', p2.category, '/', p3.category, '/', pg.page_name, '/' ) AS url FROM category AS p1, category AS p2, category AS p3, pages AS pg WHERE pg.category_id = p3.id AND p3.parent_id = p2.id AND p2.parent_id = p1.id 

Ссылка на SQL Fiddle

Related of "mysql-запрос для создания дружественного URL-адреса SEO из данной структуры таблицы"

Вот ответ на мой вопрос:

Я попытался использовать « Модифицированное дерево предварительного заказа MySql для создания URL-адреса », которое я считаю более полезным с точки зрения оптимизации запросов и других исследований с помощью stackoverflow.

Не лучшее решение, но оно работает 😉

 SELECT pagetable.id AS page_id , c1.id , pagetable.page_name AS PAGE , concat( IF(c3.category IS NULL,'','/') , IF(c3.category IS NULL,'',c3.category) , IF(c2.category IS NULL,'','/') , IF(c2.category IS NULL,'',c2.category) , IF(c1.category IS NULL,'','/') , IF(c1.category IS NULL,'',c1.category) , '/' , pagetable.page_name , '/' ) AS url FROM pages AS pagetable LEFT JOIN category AS c1 ON pagetable.category_id = c1.id LEFT JOIN category AS c2 ON c1.parent_id = c2.id LEFT JOIN category AS c3 ON c2.parent_id = c3.id