Я использую оператор RECURSIVE для MariaDB, чтобы получить путь к категории продукта, когда я знаю уникальный идентификатор категории продукта, из таблицы ссылок на себя.
Это работает:
WITH RECURSIVE categories AS (
SELECT * FROM tbl_eav_categories tec2 WHERE tec2.category_id = 1023
UNION
SELECT tec3.* FROM tbl_eav_categories tec3, categories AS c WHERE tec3.category_id = c.parent_category_id
)
SELECT GROUP_CONCAT(CONCAT(category_default_label,' [',category_id,']') ORDER BY category_id ASC SEPARATOR ' >> ') FROM categories
И возвращает:
Consumables [7] >> Catering Equipment and Supplies [95] >> Tea Bags [1023]
Отлично.
Но теперь мне нужно перечислить все идентификаторы категории и во втором столбце их пути.Я подумал, что это просто вопрос SELECT для таблицы первичной таблицы категорий ('tbl_eav_categories') и отбрасывание вышеуказанного запроса в качестве столбца подзапроса.Примерно так:
SELECT
@CatID := category_id AS 'cat_id',
(
WITH RECURSIVE categories AS (
SELECT * FROM tbl_eav_categories tec2 WHERE tec2.category_id = @CatID
UNION
SELECT tec3.* FROM tbl_eav_categories tec3, categories AS c WHERE tec3.category_id = c.parent_category_id
)
SELECT GROUP_CONCAT(CONCAT(category_default_label,' [',category_id,']') ORDER BY category_id ASC SEPARATOR ' >> ') FROM categories
) 'categorypath'
FROM tbl_eav_categories;
Однако все, что я получаю, это:
cat_id categorypath
1 Bearings [1]
2 Bearings [1]
3 Bearings [1]
4 Bearings [1]
5 Bearings [1]
6 Bearings [1]
...
(так до конца всего набора результатов).
После некоторого исследованияЯ верю, что это как-то связано с вычисляемой переменной @CatID до ее назначения, но я не могу понять, как ее обойти.
Я пытался следовать указаниям Бена Инглиша здесь: Пользовательская переменная в подзапросе MySQL , но это сбивает меня с толку: (
Пожалуйста, помогите!:)