2012-01-03 81 views
1

好吧,所以我得到了2张桌子。一个拥有食谱,第二个是所有的评级。显示最受好评的PHP和MySQL

recipes_ratings: 
id, rating, user_id, recipe_id 

recipes: 
id, name 

我想计算每个配方的所有行。然后分类并显示最高评分和下降的食谱。

最简单的方法是什么?我曾想过要查询

SELECT * FROM recipes_ratings 

然后通过评分循环计数,并存储到数组中,然后从中进行排序。

但它可以做得更简单吗?一个查询只做这一切..或?

+1

也许类似于'SELECT recipe_id,SUM(rating)FROM recipes_rating GROUP BY recipe_id ORDER BY SUM(rating)DESC;' – 2012-01-03 22:18:02

+0

实际上,您可能希望'AVG'使用平均评分。你可能也想考虑过滤只有一两次评分的食谱,因为这会歪曲排名。 – 2012-01-03 22:26:48

回答

1

根据您希望如何计算每个配方的总体评分,您可能需要修改计算。但查询应该是这样的:

SELECT r.id, product, avg(rating) as average_rating 
FROM recipes r 
LEFT JOIN recipes_ratings rr 
    ON (r.id=rr.recipe_id) 
GROUP BY id 
ORDER BY 3 desc; 

请注意,这也将输出食谱没有任何评级。如果您不想让他们返回,请将LEFT JOIN更改为JOIN

+0

这并不奏效。它给了我一些错误的结果。我试过只有一行给了5星的食谱,它甚至没有出现在顶部 – Karem 2012-01-03 22:43:35

+0

你能提供一些测试数据吗? – 2012-01-03 22:49:44

+0

确定看到这个:http://pastebin.com/xvvzTY4p – Karem 2012-01-03 22:57:13