我正在为房地产业务制作过滤器。它们具有多个属性和过滤器,可以将它们作为客户提取。
我遇到一个问题,经过各种OR处理后,Mysql会忽略此OR后详细说明的句子。
SELECT * FROM props WHERE tipo = 'Casas_Casa' OR tipo = 'Departamentos_Duplex' OR tipo = 'Casas_Chalet' OR tipo = 'Casas Condominio' OR tipo = 'Countries y Barrios cerrados_Casas' OR tipo = 'Countries y Barrios cerrados_Casas' OR tipo = 'PH' AND operacion = 'Alquiler' ORDER BY modif DESC
Mysql响应所有OR,但不识别'operacion'值,但确实对它们进行了排序。
答案 0 :(得分:1)
原因是AND
的优先级高于OR
,因此条件的AND operacion = 'Alquiler'
部分仅与'PH'
约束“绑定”。 / p>
添加括号以强制使用正确的优先级:
SELECT *
FROM props
WHERE (tipo = 'Casas_Casa'
OR tipo = 'Departamentos_Duplex'
OR tipo = 'Casas_Chalet'
OR tipo = 'Casas Condominio'
OR tipo = 'Countries y Barrios cerrados_Casas'
OR tipo = 'Countries y Barrios cerrados_Casas'
OR tipo = 'PH')
AND operacion = 'Alquiler'
ORDER BY modif DESC
您还可以使用IN
表达式来简化您的情况:
SELECT *
FROM props
WHERE tipo IN (
'Casas_Casa'
, 'Departamentos_Duplex'
, 'Casas_Chalet'
, 'Casas Condominio'
, 'Countries y Barrios cerrados_Casas'
, 'Countries y Barrios cerrados_Casas'
, 'PH')
AND operacion = 'Alquiler'
ORDER BY modif DESC