CodeIgniter生成的Statement没有按预期给出结果

时间:2013-12-01 10:14:31

标签: php sql codeigniter search

我已经打印出一个CI生成的代码,所以要谈谈这个陈述,因为它会更容易。这是:

SELECT * 
FROM (`ads`) 
WHERE `status` = 2 AND `province` = '5' AND `title` LIKE '%شریف%' 
      OR `content` LIKE '%شریف%' OR `name` LIKE '%شریف%' 
      OR `keywords` LIKE '%شریف%' 
ORDER BY `stars` DESC

但是,它显示了该省的值为“8”的结果,而在声明中则表示仅获得省份“5”的结果。为什么它不能正常工作?

2 个答案:

答案 0 :(得分:1)

运算符and的优先级高于运算符or。这意味着如果您查询:

select  *
from    applicants
where   expected_salary < 10
        or knowledge = 'high' 
        and has_residency_permit = 'true'

如果没有居留许可,你可以找到薪水低的人。解决方案是使用括号覆盖优先级:

select  *
from    applicants
where   (expected_salary < 10
        or knowledge = 'high')
        and has_residency_permit = 'true'

此查询仅返回具有居留许可的申请人。

答案 1 :(得分:0)

您可以尝试此操作(CI支持Custom string

$where = "title LIKE '%شریف%' OR content LIKE '%شریف%' OR name LIKE '%شریف%' OR keywords LIKE '%شریف%'";
$this->db->select('*');
$this->db->from('ads');
$this->db->where($where);
$this->db->where("status = 2 AND province = '5'");
$this->db->order_by('stars', 'desc');

转到上面的指定链接,查找custom string