这让我很困惑,在阅读了许多论坛和“如何”网站之后,我想我更困惑为什么这不起作用。
我有 2 个要加入的表。
表 1(产品)包含我所有的产品详细信息。
表 2(评级)包含每个产品的所有评级,每个产品都有来自 3 个不同评级实体的 3 个评级。
我正在研究一组 AJAX 搜索过滤器,并且需要以包含所有过滤器的方式编写查询。
过滤器包括价格、评论数量、平均评论星级、评分 1、评分 2、评分 3。
价格、评论数量和平均星级来自表 1(产品)。
等级 1、2 和 3 来自表 2(等级)。
我的查询需要这样的东西,但是当我知道(已在数据库中验证)我有符合我正在查询的标准的记录时,这将返回零结果。
SELECT p.id, p.name
FROM products p
JOIN ratings r ON p.id = r.id
WHERE p.num_reviews BETWEEN '0' AND '1000'
AND p.price BETWEEN '0' AND '500'
AND p.avg_rvw_stars BETWEEN '0' AND '5'
AND (r.ratingSource='1' AND (r.rating BETWEEN '1' AND '4'))
AND (r.ratingSource='2' AND (r.rating BETWEEN '0' AND '100'))
AND (r.ratingSource='3' AND (r.rating BETWEEN '0' AND '100'))
ORDER BY p.name ASC
问题似乎存在于最后三个 WHERE 语句中。如果我删除 3 个中的任何 2 个,我会得到结果。但是当我包括所有 3 个时,当有符合条件的记录时,我什么也得不到。
如果我将最后两个 AND 更改为 OR,我也会得到结果,但这不是预期或需要的结果集。
我写得不正确吗?
非常感谢任何帮助/指导!