此查询之间有什么区别:
$this->db->select('*');
$this->db->from('logs AS l');
$this->db->join('log_group_ref AS r', 'l.log_id = r.log_id');
$this->db->like('l.log_title', 'hello');
$this->db->or_like('l.log_content', 'hello');
$this->db->where('r.group_id', 1);
和此:
SELECT * FROM logs as l
join log_group_ref as r
on l.log_id = r.log_id
where l.log_title like "%hello%"
or l.log_content like "%hello%"
and r.group_id = 1
当我运行CI Active记录方式时,我会得到与通用查询不同的结果。
当我故意在CI查询中输入错误时,比如从字段中删除一个字母以查看控制台上的错误,它会在JOIN子句之后移动WHERE子句。
我认为这有所不同,因为我从两者中得到了不同的结果。
知道如何解决这个问题吗?
或者我正在运行错误的查询?
更新
根据要求,这是CI生成的查询:
Error Number: 1054
Unknown column 'r.group_i' in 'where clause'
SELECT `*` FROM (`logs` AS l)JOIN `log_group_ref` AS r ON
`l`.`log_id` = `r`.`log_id`JOIN `users` AS u ON `u`.`user_id`=`l`.`log_author`WHERE
`r`.`group_i` = '1' AND `l`.`log_title` LIKE '%at%'OR `l`.`log_content` LIKE '%at%'
Filename: C:\xampp\htdocs\done\system\database\DB_driver.php
Line Number: 330
在这里,我故意删除最后一个WHERE子句中r.group_id中的'd'。
答案 0 :(得分:0)
你有一个不同之处,因为如果选择
,它会有所不同( someting like '%a'% or someting like '%b' ) and someting = 1
someting like '%a'% or ( someting like '%b' and someting = 1)
someting like '%a'% or someting like '%b' and someting = 1
所以有不同之处 正如我在评论中所写的那样使用
$this->output->enable_profiler(TRUE);
要知道你做了什么CI查询和页面结尾以及大量的oder数据 但要在CI中使用(),你需要像
那样$this->db->where('(someting like "%'.$a.'%" or someting like "%'.$b.'%" )',null,false)
我希望它有所帮助