Измените синтаксис MySQL RECURSIVE на JOINMySql

Форум по Mysql
Ответить
Anonymous
 Измените синтаксис MySQL RECURSIVE на JOIN

Сообщение Anonymous »

Я борюсь с каким-то кодом, который не могу понять. Его передал мне разработчик, использующий MySQL v.8, и я работаю на клиентском сервере под управлением MySQL 5.5.
Код, с которым я работаю, представляет собой функцию PHP, используемую для извлечения данных, из которых создаются хлебные крошки:

Код: Выделить всё

    # Extract category breadcrumbs.
# --
public function categoryBreadcrumbs($category_id)
{
$stmt = $this->connection->prepare("
WITH RECURSIVE category_path AS (
SELECT id, name, parent_id, 0 as level
FROM categories
WHERE id = ?
UNION ALL
SELECT c.id, c.name, c.parent_id, level + 1
FROM categories c
INNER JOIN category_path cp ON c.id = cp.parent_id
)
SELECT id, name, parent_id
FROM category_path
ORDER BY level DESC
");

$stmt->execute([$category_id]);
return $stmt->fetchAll();
}
Проблема здесь в том, что MySQL не поддерживал синтаксис AND RECURSIVE для общих табличных выражений (CTE) до версии MySQL 8.0.
Похоже, что я должен быть в состоянии заменить это синтаксисом LEFT или INNER JOIN и/или UNION без CTE, но я просто не могу понять это. Я также не совсем уверен, сколько уровней она будет иметь.
К вашему сведению, структура таблицы следующая:
mysql> описать категории_резервной копии;



Поле
Тип
Нулевой
Ключ
По умолчанию
Дополнительно




id
int(11)
НЕТ
PRI
NULL
auto_increment


имя
varchar(255)
НЕТ
MUL
NULL



parent_id
int(11)
YES
MUL
NULL



model_count
int(11)
YES

NULL




8 строк в наборе (0,01 секунды)
Вот пример одного пути через данные:
Категории верхнего уровня
--
mysql> ВЫБЕРИТЕ идентификатор, имя, родительский_ид ИЗ категорий, где родительский_ид равен NULL;



id
имя
parent_id




1
Аксессуары
NULL


2
Лодки
NULL


3
Внутренние и TowSports
NULL


4
Jet Drive - SportJet
NULL


5
Навесной
NULL


6
Двигатели Reman, Quicksilver и Crate
NULL


7
Кормовой привод
NULL


8
Троллинговый двигатель
NULL


9
Привод Zeus Pod, Doen Jet Drive
NULL



9 строк в наборе (0,00 секунды)
Дополнительные категории
--
mysql> ВЫБЕРИТЕ id, имя, родительский_ид ИЗ категорий, где родительский_ид = 1;



id
имя
parent_id




16
Электрическое оборудование
1


17
Системы выхлопа/охлаждения и дополнительные комплекты
1


18
Топливные/масляные баки, Линии, комплекты фильтров и коррозия
1


19
Системы управления джойстиками
1


20
Пульты дистанционного управления и Компоненты
1


21
SmartCraft
1


22
Системы и компоненты рулевого управления
1


23
Инструменты
1


24
Системы и компоненты обрезки/наклона/подъема
1



9 строк в наборе (0,00 с)
Третичные категории
--
mysql> ВЫБРАТЬ id, имя, родительский_ид ИЗ категорий, где родительский_ид = 16;



id
name
parent_id




143
Аналоговые датчики
16


144
Аккумуляторные системы
16


145
Комплекты электростартера
16


146
Ремонт жгутов
16


147
Кнопочные переключатели/жгуты проводов и разъемы
16


148
Выключатели/ремешки пуска/останова
16


149
Триммерные переключатели
16



7 строк в наборе (0,00 секунды)
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/798 ... oin-syntax
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»