次の3つの表の列を結合しようとしています。テーブル2とテーブル3の2つの列のAVGを持つtable1のMySQL - JOIN列
pages:
*id* | *identifier* | reference | url | ...
-------------------------------------------------------
1 | 1 | page one | http://... | ...
2 | 3 | page two | ..... | ...
3 | 23 | page three | ..... | ...
4 | 25 | page four | ..... | ...
5 | 43 | page five | ..... | ...
comments:
page_id | *rating* | comment | is_approved | name | ...
-------------------------------------------------------
1 | 4 | bla bla | 1 | joe | ...
2 | 5 | more bla | 1 | jim | ...
2 | 3 | blub | 1 | jill | ...
3 | 1 | blubblub | 1 | jack | ...
4 | 2 | hey ho | 0 | jimbo| ...
5 | 4 | huhu | 1 | mike | ...
ratings:
page_id | *rating* | ip_address | ...
-----------------------------------
1 | 3 | ... | ...
1 | 2 | ... | ...
2 | 5 | ... | ...
3 | 4 | ... | ...
4 | 0 | ... | ...
5 | 2 | ... | ...
pages.idリンクはcomments.page_idと具体的
をratings.page_id、私は 'star_total' AS comments.ratingとratings.ratingの平均値を取得したいのですが、この新しいを結合します"ページ"からの腐食性のある行を持つ列になります。このように、id、identifier、star_totalのようなテーブル構造が得られます。
これは、私がおしゃべりしていることです。私はそれがどのようにすべきかわからない。それだけで大まかなアイデアだと私は得た限り:
SELECT pages.id, pages.identifier, star_total
FROM pages LEFT JOIN
(
SELECT AVG(`rating`) FROM (
SELECT 'rating' FROM comments
WHERE `comments.is_approved = '1'
AND comments.rating != '0'
AND comments.page_id = ratings.page_id
UNION ALL
SELECT `rating`
FROM ratings
WHERE ratings.page_id = comments.page_id
) AS `star_total`
)
サンプルデータと必要な結果を表形式で入力してください。コメントとして投稿しないでください。代わりに[編集]を使用してください。 –
両方の回答ありがとう!問題が解決しました。 –