2013-03-07 86 views
0

這是什麼查詢之間的區別:和笨的Active Record查詢順序

$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活動記錄的方式,我得到對通用查詢不同的結果。

當我故意在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 

在這裏,我故意刪除 'd' 的r.group_id在過去的WHERE子句。

+0

將CI生成的查詢粘貼到問題中以查看差異 – Shaolin 2013-03-07 05:43:29

+0

$ this-> output-> enable_profiler(TRUE);你會看到你運行的所有查詢 – ddjikic 2013-03-07 09:00:10

回答

0

你有性差異,因爲它是一個difererece如果你選擇

(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); 

寫信給SE什麼CI做你會SE查詢和頁面的結尾以及整個或大量的數據 ,但要在CI中使用(),則需要類似於

$this->db->where('(someting like "%'.$a.'%" or someting like "%'.$b.'%")',null,false) 

我希望它有幫助