我创建了一个网站,用户可以在其中评价从1到5星的商品(比如书)。我创建了一个MySQL数据库和一个存储每个评级信息的表(itemid,userid,ratingValue)。
每个项目都有一个专门的网页,我想在此页面上显示以下信息:(1)评分数量和(2)平均评分。我认为最好用视图完成。在思考要在视图中使用的MySQL查询时,我来到了:
SELECT ItemID, COUNT(ratingValue), IFNULL(AVG(ratingValue),0) FROM reviews GROUP BY ItemID
问题:如果某个项目尚未评级,它将不会出现在查询中。我想要的是所有项目都出现在查询结果(视图)中,如果有一个没有评论的项目,它应该显示有0评论的信息,并且平均评级是某个任意值,让&# 39; s说0。
如果没有匹配的行,AVG()将返回NULL
因此我尝试使用IFNULL()函数。但是,它不起作用。例如,在包含项目1,2,3,4,5的数据库中,项目5没有评论,我会得到:
ItemID COUNT(Rating) IFNULL(AVG(ratingValue),0) 1 4 4.0000 2 2 4.0000 3 2 3.5000 4 3 5.0000
关于如何克服这个问题的任何想法?
答案 0 :(得分:0)
您必须有另一个表格列出您的所有项目(不考虑他们是否有评论),并将该表格连接到您的reviews
表格。如果没有这个,就无法单独从reviews
表中推断哪些项目可能没有评论。
类似于:
SELECT
i.itemID AS itemID,
COUNT(r.rating) AS ratingCount,
AVG(ratingValue) AS averageRating
FROM items AS i
LEFT JOIN reviews AS r
ON i.itemID = r.itemID
GROUP BY i.itemID
这应该给出如下结果:
ItemID ratingCount averageRating
1 4 4.0000
2 2 4.0000
3 2 3.5000
4 3 5.0000
5 0 NULL