我将仅发布包含WHERE
子句的
//Together
WHERE `energy_extra`.`PacketFk` IN('7')
OR `energy_extra`.`house_extra_id` IN('4')
//Not together (separate where statements)
AND `People_from` <= '4'
AND `People_to` >= '4'
AND `Size` >= '100'
AND `Size` <= '200'
AND `houseconstructiontypelist`.`ConstructionTypeFk` IN('1', '2')
我无法更改这些行的顺序,因为它们是使用条件语句在codeigniter活动记录中编写的更大查询的一部分。我能改变的是SQL本身。
我没有得到所需的结果,因为WHERE foo IN ('7')
OR bar IN ('4')
后跟AND
因此SQL认为这些进一步的条件是OR bar IN()
的一部分不是。他们需要以新的WHERE
语句开头,之后的每一行都可以从AND
开始。
我试过了,但它没有用:
//Together
WHERE `energy_extra`.`PacketFk` IN('7')
OR `energy_extra`.`house_extra_id` IN('4')
//Not together (separate where statements)
WHERE `People_from` <= '4'
AND `People_to` >= '4'
AND `Size` >= '100'
AND `Size` <= '200'
AND `houseconstructiontypelist`.`ConstructionTypeFk` IN('1', '2')
逻辑如下:
find rows where energy_extra.PacketFk is equal to 7 or where energy_extra.house_extra_id is equal to 4
then check all the other conditions
答案 0 :(得分:2)
逻辑OR
运算符的优先级低于AND
运算符 - 因此您获得此结果。
您只需要将第一个条件括在括号中:
WHERE
(
`energy_extra`.`PacketFk` IN('7')
OR `energy_extra`.`house_extra_id` IN('4')
)
AND ....
答案 1 :(得分:1)
您还可以将第一个条件(包含或)放在最后,如下所示: -
WHERE `People_from` <= '4'
AND `People_to` >= '4'
AND `Size` >= '100'
AND `Size` <= '200'
AND `houseconstructiontypelist`.`ConstructionTypeFk` IN('1', '2')
And `energy_extra`.`PacketFk` IN('7') OR `energy_extra`.`house_extra_id` IN('4')
或者只是将or语句括在括号中,将其与评论部分中评论的其他语句分开。
答案 2 :(得分:0)
你不能在同一个查询中的位置(codeigniter执行它( - &gt; where()... - &gt; where())但它转换到AND中的其他位置(如果指定的话),I我不确定你需要什么,但解决方案是手工查询并用一些括号来分隔AND,OR。 Codeigniter活跃记录它并不是很好。