我有一个在线商店的搜索引擎,我想让用户有机会通过评级过滤产品,直到现在我的查询看起来像这样:
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
它会给我结果但不计算平均值。
感谢任何帮助
由于
答案 0 :(得分:1)
AND ratings_products.ratings >= '40' AND ratings_products.ratings <= 59
这意味着您希望值介于40和59之间。您在示例中显示20和85,两者都不在您查询的范围内,因此结果为NULL
删除AND ratings_products.ratings <= 59
部分会产生一个高于40的评级查询,即85,单独查看。
我是否遗漏了某些内容,或者您是否在查询错误的值?