【发布时间】:2017-11-06 23:53:40
【问题描述】:
我正在尝试合并以下 3 个表格的列。
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 链接到 cmets.page_id 和 ratings.page_id
更具体地说,我想获得 cmets.rating 和 rating.rating AS 'star_total' 的平均值,并将这个新列与“pages”中的相应行结合起来,这样我就得到了一个这样的表结构: id、标识符、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`
)
【问题讨论】:
-
请以表格形式提供一些示例数据和所需的结果。不要将其作为 cmets 发布 - 请改用 Edit。
-
感谢您的两个回答!问题解决了。