У меня есть 5 таблиц: productCategory, products, productOptions, options, optionsGroup.То, что я пытаюсь сделать, это как-то конкатить и сгруппировать их в один запрос, чтобы получить одну строку со всей информацией об одном продукте.Например, определенный тип пищи будет иметь разные размеры и разные вкусы;Бутылки имеют разные размеры и запахи.Вот таблицы:
productCategory
categoryId categoryName
1 food
2 freshener
product
productId productCategoryRef productName
1 1 ....
2 1
3 2
4 2
FK references categoryId
productOptions
categoryRef optionsRef
1 1
1 3
2 2
2 4
FK categoryRef references productCategory (categoryId)
FK optionsRef references options (optionsId)
options
optionsId optionsName
1 kg
2 ml
3 Flavor
4 Fragrance
optionsGroup
groupId groupOptionRef groupName
1 1 3
2 1 7
3 1 14
4 2 50
5 2 250
6 3 Chicken
7 3 Beef
8 4 Alpine
9 4 Berries
FK groupOptionRef references options (optionId)
Таким образом, мешок для еды может быть 3 кг, 7 кг или 14 кг и может иметь два разных вкуса.Как я могу получить всю эту информацию в одном ряду в удобочитаемом формате?Вот что я попробовал:
SELECT
pc.*, p.*,
GROUP_CONCAT(DISTINCT o.optionsName) AS optionName,
GROUP_CONCAT(og.groupName) AS options
FROM productCategories pc
JOIN products p ON p.productCategoryId=pc.categoryId
JOIN productOptions po ON po.categoryRef=pc.categoryId
JOIN options o ON o.optionsId=po.optionsRef
JOIN optionsGroup og ON og.groupOptionRef=o.optionsId
WHERE p.productName=:itemName
GROUP BY p.productId
Это дает мне одну строку с
....
optionName: 'kg,Flavor',
options: '3,7,14,Chicken,Beef'
....
, что является беспорядком.Можно ли каким-то образом объединить каждый вариант, а затем обработать его проще, не угадывая, какая часть идет в кг / вкус?
Я знаю, что здесь будет легко, но позже будет раздел обзора, который будет ссылаться на этот productId, к которому я также хотел бы присоединиться к этому запросу.Любой совет приветствуется, я открыт для лучшей структуры БД, если она нужна.