如何在mysql中使用范围值搜索

时间:2012-05-14 20:33:32

标签: mysql

我被困在范围搜索查询中。请参阅以下示例:

SELECT * FROM product where status='A' and subcat_id=5 AND product.price < 50 AND  product.price BETWEEN 50 AND 100 AND category = "male"

在上面的示例中,它不会返回低于50的记录,但它们仍在数据库中。

如果我在下面的第二个例子中尝试:

SELECT * FROM product where status='A' and subcat_id=5 AND product.price < 50 OR  product.price BETWEEN 50 AND 100 AND category = "male"

它返回所有不属于男性类别但小于50

的记录

最后,我希望得到的记录范围小于50或介于50到100之间,但仅适用于男性类别。

感谢您的建议。

2 个答案:

答案 0 :(得分:3)

您还需要更多()来对条件进行分组。如果我理解正确,您可能希望product.price < 50用于任何其他匹配,或product.price BETWEEN 50 AND 100仅用于男性。在这种情况下,请使用()将这两个条件分组。

SELECT * 
FROM 
  product
where 
  status='A' 
  and subcat_id=5
  AND (product.price < 50 OR  (product.price BETWEEN 50 AND 100 AND category = "male"))

答案 1 :(得分:3)

AND的优先级高于OR。您的查询解释如下:

SELECT col1, col2, ..., coln
FROM product
WHERE (status='A' AND subcat_id=5 AND product.price < 50) OR
      (product.price BETWEEN 50 AND 100 AND category = 'male')

您需要在适当的位置插入括号以正确分组术语。唯一剩下的问题就是放在哪里。

我认为你的意思是:

SELECT col1, col2, ..., coln
FROM product
WHERE status='A'
AND subcat_id=5
AND (
    product.price < 50 OR 
    (product.price BETWEEN 50 AND 100 AND category = 'male')
)

这将显示所有类别的50以下的产品,以及男性类别的50到100之间的产品。