次のようなmySQL文があります。すべてのレストラン(1列に1つ)を選択し、各レストランの料理を各レストランの列に連結し(1つのレストランにつき1つ以上の料理がある場合があるため)、各レストランの列に、同様に平均格付けおよび格付け数を試みます。MySQL:GROUP_CONCAT、AVG、COUNTの問題
私は3つのテストレストランを設定しました。レストラン1には2種類の料理と3種類の料理があります。問題は、評価の数が実際の値の2倍を返し、料理が(料理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