0

このクエリの違いは何ですか:

$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 Recordの方法で実行すると、一般的なクエリに対して異なる結果が得られます。

コンソールにエラーを表示するためにフィールドから文字を削除するなど、意図的に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」を意図的に削除しています。

4

1 に答える 1

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が何をしたかを確認するには、クエリとページの終わりと大量の他のデータを確認しますが、CI内で ( ) を使用するには、次のようなものが必要です

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

私はそれが役立つことを願っています

于 2013-03-07T09:06:34.850 に答える