私は3つのデータテーブルを持っています。
エントリ データ テーブルには、ID を持つエントリがあります (entryId を主キーとして)。
entryId フィールドと評価値 (1 から 5) を持つ複数のエントリがある EntryUsersRatings という別のテーブルがあります。(評価は 1 つの entryId に対して複数回保存されます)。列: ratingId (主キー)、entryId、評価 (整数値)。
3 番目のデータ テーブルには、最初のテーブルのエントリの翻訳があります (entryId、languageId、title - translation)。
私がやりたいことは、最初のデータ テーブルからすべてのエントリをタイトルと共に (言語 ID で) 選択することです。その上で、EntryUsersRatings に格納されている各エントリ (複数回格納できます) の平均評価が必要です。
私はこれを試しました:
SELECT entries.entryId, EntryTranslations.title, AVG(EntryUsersRatings.rating) AS AverageRating
FROM entries
LEFT OUTER JOIN
EntryTranslations ON entries.entryId = EntryTranslations.entryId AND EntryTranslations.languageId = 1
LEFT OUTER JOIN
EntryUsersRatings ON entries.entryId = EntryUsersRatings.entryId
WHERE entries.isDraft=0
GROUP BY title, entries.entryId
isDraft は、エントリが必要なすべての情報とともに保存されていないことを意味するものです (不完全なデータ - ここでは関係ありません)。
どんな助けでも大歓迎です。
編集:私のソリューションでは、評価にnull値が返されます。Edit1: このクエリは問題なく動作しています。間違ったデータベースを調べていました。また、同じ結果が得られる別の解決策にもたどり着きました(誰かがこれを役に立つと思ってくれることを願っています):
SELECT entries.entryId, COALESCE(x.EntryUsersRatings, 0) as averageRating
FROM entries
LEFT JOIN(
SELECT rr.entryId, AVG(rating) AS entryRating
FROM EntryUsersRatings rr
GROUP BY rr.entryId) x ON x.entryId = entries.entryId