2015-05-11 26 views
0

我有以下准备语句查询:MySQL和条款后OR子句被忽略

SELECT id FROM CustomerSettings WHERE id >= ? OR displayNameType = ? AND id < ? LIMIT 5 OFFSET 1 

查询的“ID <”的部分被忽略。奇怪的是,如果我移动OR语句前面的语句,那么它将被MySQL数据库引擎正确评估。这种预期的行为似乎很奇怪。我也曾尝试将OR子句放在括号内,这不幸也没有奏效;紧接在OR之后的AND子句仍然被忽略。

+0

很难确切地看到您要查找的结果。 'AND'绑定比'OR'更紧密,所以MySQL会将你的解析为'WHERE id> =? OR(displayNameType =?AND id <?)'如果那不是你想要的,那么这个选择可能没有意义。(id> =?OR displayNameType =?)AND id <?'因为'id'可能不是能够满足这两个条件。 –

回答

5

这是由于operator precedenceANDOR之前绑定,所以你的查询是WHERE (id >= ?) OR (displayNameType = ? AND id < ?)。事情的顺序很重要。我建议使用括号来明确订单号码ANDOR