MySQL使用几个WHERE子句选择AVG

时间:2015-03-23 21:30:32

标签: php mysql count sum average

我有一个在线商店的搜索引擎,我想让用户有机会通过评级过滤产品,直到现在我的查询看起来像这样:

SELECT products.*,prices.price,AVG(ratings_products.rating)
FROM products,prices,ratings_products
WHERE products.title REGEXP 'lg' AND products.active = 'yes'
AND prices.price >= '10' AND prices.price <= '298650'
AND products.cod_product = prices.id_product
AND ratings_products.ratings >= '40' AND ratings_products.ratings <= 59
AND ratings_products.id_product = products.cod_product
AND products.id_category = '59' LIMIT 0,1

我们的想法是按价格,特定过滤器和评级进行过滤,所有工作除了评级之外。我的表ratings_products具有以下结构:

id | id_product | id_user | title | comment | date | rating
1  |      18    |    65   |awesome| some    |12344 | 85
2  |      18    |    84   |cool   | great   |12345 | 20

现在我需要AVG返回85到20之间的平均值,但是查询返回NULL,如果我删除ratings_products.rating <= 59它会给我结果但不计算平均值。

感谢任何帮助

由于

1 个答案:

答案 0 :(得分:1)

AND ratings_products.ratings >= '40' AND ratings_products.ratings <= 59

这意味着您希望值介于40和59之间。您在示例中显示20和85,两者都不在您查询的范围内,因此结果为NULL

删除AND ratings_products.ratings <= 59部分会产生一个高于40的评级查询,即85,单独查看。

我是否遗漏了某些内容,或者您​​是否在查询错误的值?