Код, с которым я работаю, представляет собой функцию 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();
}
Похоже, что я должен быть в состоянии заменить это синтаксисом 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
Мобильная версия