Задать вопрос
@OptimusPrime5645

Как получить родительскую категорию у подкатегории?

Привет. У меня сайт интернет магазин.
Есть товары. У товаров своя таблица Товары.
У каждого товара есть категория. Есть отдельная таблица с Категориями. Есть категории, есть подкатегории.
Я их разделяю по parent_id, просто записываю у каждой подкатегории ее основную категорию.

При создании товара администратор указывает у товара подкатегорию, в бд у товара я записываю подкатегорию, но при выводе мне нужно показать ее родительскую категорию, которая связана по parent_id.

пишу на php pdo mysql, как можно сделать такую связь?

до этого просто была такая связь
FROM tovari
LEFT JOIN categories
ON (tovari.categories_id = categories.id)


Думал может так сделать, но не работает
FROM tovari
LEFT JOIN categories
ON (tovari.categories_id = categories.id AND categories.parent_id = categories.id)
  • Вопрос задан
  • 271 просмотр
Подписаться 1 Простой 7 комментариев
Решения вопроса 1
@Akela_wolf
Extreme Programmer
Если у вас неограниченная вложенность, то только через рекурсивный запрос. MySQL 8 научился их делать. Это позволит вам рекурсивно собрать в одном из полей запроса данные из зависимых таблиц. Вот документация

Вот пример:
CREATE TABLE cat(
  id INT NOT NULL PRIMARY KEY,
  title VARCHAR(100) NOT NULL,
  parent_id INT NULL
);

INSERT INTO cat VALUE (1, 'Root1', NULL), (2, 'Root2', NULL), (3, 'Child1', 1),
(4, 'Child2', 3), (5, 'Child3', 2);

WITH RECURSIVE rcat(id, title, path) AS (
  SELECT cat.id, cat.title, CAST(cat.id AS CHAR(200)) FROM cat WHERE parent_id IS NULL
  UNION ALL
  SELECT cat.id, cat.title, CONCAT(rcat.path, ',', cat.id) FROM cat JOIN rcat ON cat.parent_id=rcat.id
)
SELECT * FROM rcat WHERE id=4;


Пример
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы