Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

выбрать категорию с самым большим числом подкатегорий вложенных-родительских и путь категорий MYSQL для OPENCART аналог SYS_CONNECT_BY_PATH oracle

Практика




выбрать категорию с самым большим числом подкатегорий вложенных-родительских и путь категорий MYSQL для OPENCART аналог SYS_CONNECT_BY_PATH oracle


как известно сложно выбирать иерархические данные из реляционных данных без рекурсии mysql все еще не поддерживает SQL-1999 рекурсию в запросах типа
WITH [recursive] имя_алиаса_запроса [ (список столбцов) ]
AS (запрос)
основной запрос
можно как то намутить в хранимых процедурах но не хочу с ними связываться

как это можно реализовать одним запросом?


в opencart товар может храниться в нескольких категориях и нужно выбрать самую вложенную категорию и весь путь к родителю(предположим что товар может находится в категориях только одной ветви)

select
pc.category_id, t1.parent_id, t2.parent_id, t3.parent_id, t4.parent_id, t5.parent_id,
!ISNULL( t1.parent_id)+!ISNULL( t2.parent_id)+! ISNULL(t3.parent_id)+!ISNULL( t4.parent_id)+!ISNULL( t5.parent_id) AS d
FROM _product_to_category pc
left join _category t1 on t1.category_id = pc.category_id
left join _category t2 on t1.parent_id = t2.category_id
left join _category t3 on t2.parent_id = t3.category_id
left join _category t4 on t3.parent_id = t4.category_id
left join _category t5 on t4.parent_id = t5.category_id
where
product_id = 3080
order by d DESC
LIMIT 1


но повторю
(предположим что товар может находится в категориях только одной ветви)


еще одно ограничение - это предельно число вложенных категорий

вот полный запрос на выборку всех названий категорий с полным путем самой вложенной категории для товара OPENCART

SELECT cd.* FROM _category_description cd
,
(
select
pc.category_id AS c1,
t1.parent_id AS c2, t2.parent_id AS c3, t3.parent_id AS c4, t4.parent_id AS c5, t5.parent_id AS c6,
!ISNULL( t1.parent_id)+!ISNULL( t2.parent_id)+! ISNULL(t3.parent_id)+!ISNULL( t4.parent_id)+!ISNULL( t5.parent_id) AS d
FROM _product_to_category pc
left join _category t1 on t1.category_id = pc.category_id
left join _category t2 on t1.parent_id = t2.category_id
left join _category t3 on t2.parent_id = t3.category_id
left join _category t4 on t3.parent_id = t4.category_id
left join _category t5 on t4.parent_id = t5.category_id
where
product_id = 3465
order by d DESC
LIMIT 1
) f
WHERE cd.category_id IN (f.c1,f.c2,f.c3,f.c4,f.c5,f.c6)
создано: 2014-05-25
обновлено: 2021-03-13
365



Рейтиг 10 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Базы данных - MySql (Maria DB)

Термины: Базы данных - MySql (Maria DB)