У меня есть рейтинги, которые представляют рейтинг продукта.
Эти рейтинги имеют значение (целое число от 1 до 5), product_id и rating_type_id.
Рейтинги имеют отношение «многие к одному» к rating_types. rating_types имеют отношение many_to_one к rating_categories. Значение: one rating_category
имеет several rating_types
, а one rating_types
имеет several ratings
.
Кроме того, каждый продукт имеет отношение «многие ко многим» к rating_categories. Это означает, что данный продукт может быть оценен только рейтингами, чей rating_type принадлежит этим рейтингам_категорий.
Для данного product_id я хотел бы получить для каждой rating_category название категории, количество всех оценок и среднее значение всех оценок. Эти рейтинги имеют product_id в качестве внешнего ключа и должны иметь rating_type в качестве внешнего ключа, чей rating_type имеет рейтинг_категорию в качестве внешнего ключа.
Это мой запрос до сих пор, но это неправильно:
SELECT rc.name, rc.rating_category_id,
(SELECT COUNT(*) as count, AVG(value) as average
FROM rating
WHERE rating_id IN (
SELECT r.rating_id
FROM rc // I want to reference the same rating_category rc as above
LEFT JOIN rating_type rt
ON rating_category_id
LEFT JOIN rating r
ON rating_type_id
)
)
FROM rating_category_4_product rc4p
LEFT JOIN rating_category rc
ON rating_category_id
WHERE rc4p.product_id = {$productId}