为什么sql会忽略我的句子?

时间:2018-05-14 23:20:20

标签: sql mysqli xampp

我正在为房地产业务制作过滤器。它们具有多个属性和过滤器,可以将它们作为客户提取。

我遇到一个问题,经过各种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'值,但确实对它们进行了排序。

1 个答案:

答案 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