|
我使用了where和多个like,or_like,代码段如下:
PHP复制代码
if ($level=='r'){$where="tb_hotel.region_id";}else{$where="tb_province.id";}
$query=$this->db
->select('tb_hotel.*,tb_region.region,tb_province.province')
->from('tb_hotel')
->where($where,$id)
->join('tb_region','tb_hotel.region_id = tb_region.id','inner')
->join('tb_province','tb_region.province_id = tb_province.id','inner')
->like('hotel_name',$key)
->or_like('contact',$key)
->order_by($sortField,$sortOrder)
->limit($size,$start)
->get();
复制代码
生成的SQL语句是这样的
SQL复制代码
SELECT `tb_hotel`.*, `tb_region`.`region`, `tb_province`.`province`
FROM (`tb_hotel`)
INNER JOIN `tb_region` ON `tb_hotel`.`region_id` = `tb_region`.`id`
INNER JOIN `tb_province` ON `tb_region`.`province_id` = `tb_province`.`id`
WHERE `tb_hotel`.`region_id` = '1'
AND `hotel_name` LIKE '%%'
OR `address` LIKE '%%'
ORDER BY `id` ASC LIMIT 10
复制代码
这个SQL语句和我的初衷不同,产生的结果也不是想要的结果
我希望where中的条件是必经条件,
而生成的语句中,因为缺少(),导致只要OR `address` LIKE '%%' 条件为true时,where条件被忽略。
我想要的SQL语句其实是
SQL复制代码
SELECT `tb_hotel`.*, `tb_region`.`region`, `tb_province`.`province`
FROM (`tb_hotel`)
INNER JOIN `tb_region` ON `tb_hotel`.`region_id` = `tb_region`.`id`
INNER JOIN `tb_province` ON `tb_region`.`province_id` = `tb_province`.`id`
WHERE `tb_hotel`.`region_id` = '1'
AND (`hotel_name` LIKE '%%'
OR `address` LIKE '%%')
ORDER BY `id` ASC LIMIT 10
复制代码
请高人告知该怎么解决?难道要自己动手组装SQL语句?
|
|