Мне нужно получить список категорий из store_cat, с дочерним элементом COUNT
из store_item (количество товаров) и GROUP_CONCAT
из store_cat_attributes (список атрибутов).Дело в том, что с помощью функции CONCAT
мне нужно прикрепить значение GROUP_CONCAT
к столбцу name
в родительской таблице (store_cat), и вот тут все становится хитро.
Это прекрасно работает:
SELECT
store_cat.id_cat AS id,
store_cat.name AS name,
GROUP_CONCAT(store_cat_attribute.name SEPARATOR ", ") AS attributes,
COUNT(store_item.id_item) AS products,
store_cat.flg_public AS flg_public
FROM store_cat
LEFT JOIN store_item ON store_item.id_cat = store_cat.id_cat
LEFT JOIN store_cat_attribute ON store_cat_attribute.id_cat = store_cat.id_cat
WHERE store_cat.id_store = 1
GROUP BY store_cat.id_cat
ORDER BY name
Но это то, что мне действительно нужно.Проблема в том, что когда я выполняю этот запрос, значение store_cat.name показывает пустое значение при отсутствии атрибутов:
SELECT
store_cat.id_cat AS id,
CONCAT(store_cat.name, " (", GROUP_CONCAT(store_cat_attribute.name SEPARATOR ", "), ")") AS name,
COUNT(store_item.id_item) AS products,
store_cat.flg_public AS flg_public
FROM store_cat
LEFT JOIN store_item ON store_item.id_cat = store_cat.id_cat
LEFT JOIN store_cat_attribute ON store_cat_attribute.id_cat = store_cat.id_cat
WHERE store_cat.id_store = 1
GROUP BY store_cat.id_cat ORDER BY name
По сути, идея заключается в том, что store_cat.name
столбец должен содержать список атрибутов с CONCAT
и GROUP_CONCAT
, вот так:
- Comidas
- Correas (S, M, L, XL)
- Juguetes
- Medicinas
Вот текущее SQLfiddle .Кстати, что-то не так с порядком атрибутов в текущем GROUP_CONCAT
.Отображается ( XL , S, M, L) вместо (S, M, L, XL ).
Решаемые проблемы:
Используйте GROUP_CONCAT
для объединения атрибутов с именем категории только при наличии атрибутов.
Используйте store_cat_attributes.position
для установки порядка для GROUP_CONCAT
значений.
Есть идеи?Спасибо!