Рекурсивные подзапросы

Сортировка (плохая)

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

Отсортируем строки по пути до элемента:

WITH RECURSIVE lv_hierarchy AS (
  SELECT c.category_id,
         c.parent_category_id,
         c.name,
         1 AS level,
         '/' || c.name AS path
    FROM category c
   WHERE c.parent_category_id IS NULL

   UNION ALL

  SELECT c.category_id,
         c.parent_category_id,
         c.name,
         p.level + 1 AS level,
         p.path || '/' || c.name AS path
    FROM lv_hierarchy p,
         category c
   WHERE c.parent_category_id = p.category_id
)
SELECT *
  FROM lv_hierarchy
 ORDER BY path
#category_idparent_category_idnamelevelpath
11NULLТовары для дома1/Товары для дома
231Бытовая техника2/Товары для дома/Бытовая техника
32NULLЦифровая техника1/Цифровая техника
472Аудиотехника2/Цифровая техника/Аудиотехника
562Игровые консоли2/Цифровая техника/Игровые консоли
642Ноутбуки и аксессуары2/Цифровая техника/Ноутбуки и аксессуары
794Ноутбуки3/Цифровая техника/Ноутбуки и аксессуары/Ноутбуки
8104Рюкзаки3/Цифровая техника/Ноутбуки и аксессуары/Рюкзаки
982Сотовые телефоны2/Цифровая техника/Сотовые телефоны
1052Фотоаппараты2/Цифровая техника/Фотоаппараты

P.S. Такая сортировка не является надежной! Читай дальше)

ПредыдущаяСледующая