簡體   English   中英

Codeigniter Active Record查詢順序

[英]Codeigniter Active Record query order

此查詢之間有什么區別:

$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查詢中放入錯誤時,例如從字段中刪除一個字母以在控制台上看到錯誤,它會將WHERE子句移到JOIN子句之后。

我認為這有所作為,因為我從兩者獲得不同的結果。

任何想法如何解決這個問題?

還是我運行了錯誤的查詢?

更新:

根據要求,這是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'。

您與眾不同,因為如果您選擇

( 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,以及頁面末尾以及大量其他數據,但是要在CI中使用(),您需要

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

我希望它會有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM