У меня есть инструкция mySQL, которая выглядит ниже. Он пытается выбрать все рестораны (по 1 на каждую строку), концы блюд для каждого ресторана (как может быть 1 или больше кухонь в ресторане) в колонку для каждого ресторана, а также для среднего рейтинга и количества оценок.MySQL: проблема с GROUP_CONCAT, AVG и COUNT
У меня есть три тестовых ресторана. Ресторан 1 имеет 2 типа кухни и 3 оценки. Проблема заключается в том, что количество оценок возвращается вдвое больше фактического значения, а кухни возвращаются как (кухня1 3 раза, а затем кухня2 3 раза), например. (кухня1, кухня1, кухня1, кухня2, кухня2, кухня2). Вы знаете, что может быть причиной этого? Спасибо за любую помощь.
SELECT
r.*,
GROUP_CONCAT(c.cuisine SEPARATOR ', ') cuisine,
ROUND(AVG(re.avg_rating),1) rating,
COUNT(re.restaurant_id) num_ratings
FROM eat_eat_restaurants r
JOIN eat_eat_restaurant_cuisines_lookup rc ON (r.restaurant_id=rc.restaurant_id)
JOIN eat_eat_cuisines c ON (rc.cuisine_id=c.cuisine_id)
LEFT JOIN eat_eat_reviews re ON (r.restaurant_id=re.restaurant_id)
WHERE r.published=1
GROUP BY r.restaurant_id
Это будет несколько матчей в одной из таблиц, в результате чего дублирование, помните, что соединения генерируют кросс-продукт. Либо это, либо ваша GROUP BY нуждается в большем количестве контента. Попробуйте изменить 'r. *' На 'r.restaurant_id' и посмотреть, не исчезла ли проблема. – Orbling