3

CodeIgniter のアクティブ レコード クラスを使用してデータベースにクエリを実行しようとしています。テーブルに多数のブログ投稿が保存されています。クエリは、特定のカテゴリが割り当てられているすべての投稿を引き出す検索機能用です。したがって、表の「カテゴリ」列には、政治、歴史、社会学のように、コンマで区切られた順不同で、その投稿のすべてのカテゴリのリストが表示されます。等

ユーザーが政治と歴史を選択した場合、これらの両方のカテゴリを持つすべての投稿のタイトルが返されます。

したがって、クエリされるカテゴリのリストは配列 $cats になります。私はこれがうまくいくと思った -

foreach ($cats as $cat){
    $this->db->like('categories',$cat);
}

これを生成することにより:

$this->db->like ('categories','Politics');
$this->db->like ('categories','History');

(どちらが生成されますか-「WHERE カテゴリ LIKE '%Politics%' AND カテゴリ LIKE '%History%')

しかし、うまくいきません。最初のステートメントしか生成しないようです。私が推測する問題は、チェーンされた各クエリで列名が同じであることです。これに関する CI ユーザー ガイド ( http://codeigniter.com/user_guide/database/active_record.html )には何もないようです。これは、チェーンされた各ステートメントが異なる列名用であると想定しているように見えるためです。 .

もちろん、1 つのステートメントで連想配列を使用することはできません。重複するキーを含める必要があるためです。この場合、すべてのキーを「カテゴリ」にする必要があります...

4

2 に答える 2

5

MySQL に関しては、データベースで次のクエリを実行したところ、問題はありませんでした。

 SELECT * 
 FROM  `TicketUpdates` 
 WHERE content LIKE  '%update%'
 AND content LIKE  '%footprints%';

同様に、次のコードは期待どおりに実行されました。

 $this->db->select('*'); 
 $this->db->from('TicketUpdates');
 $this->db->like('content', 'update');   
 $this->db->like('content', 'footprints');       
 print_r($this->db->get()->result());

CI で「like」関数を使用している場合は、適切なクエリ関数を前置および後置する必要があります。例:

 $this->db->select('*');
 $this->db->from('tablename');
 foreach($cats as $cat){
    $this->db->like('categories', $cat);
 }
 $result = $this->db->get();
于 2011-01-17T19:46:26.063 に答える
3

次のコードを使用できます

$this->db->select("*")->from($table);

foreach($cats as $single_name)
        $this->db->or_like("categories",$single_name);

$result = $this->db->get();
于 2012-05-09T05:40:43.140 に答える