1

CodeIgniter ORM active_record を使用すると、たとえば ..? SQL を生成できます。

ジェネレーター SQL の例: ... AND( LIKE ... OR LIKE ...)

SELECT id, c1, c2 FORM t1 WHERE id ='1' AND ( c1 LIKE '%3%' OR c2 LIKE '%3%' )

私がSQLインスタンスで示したようなものを生成するために、combiar ORM関数の形ではありません。

これは何ですが、最も滅びたのは私が望むものではありません。

$this->db->select('id, c1, c2')
                ->from('t1')
                ->where('id', '1111')
                ->like('c1',$sSearch)
                ->or_like('c2',$sSearch)
                ->get();
4

2 に答える 2

1

ANDとを混ぜるときOR、括弧はあなたの友達です。CodeIgniter のアクティブ レコードは、ミキシングANDなどをサポートしていませんOR

CodeIgniter は次のクエリを出力します。

SELECT id, c1, c2 FORM t1 WHERE id ='1' AND c1 LIKE '%3%' OR c2 LIKE '%3%'

明らかに、これはあなたが望むものではありません。できることは、カスタム文字列を渡して、WHEREそれを句として使用することです。

// Since we are using a custom string, we need to escape manually
$sSearch = $this->db->escape_like_str($sSearch);
$this->db->select('id, c1, c2')
            ->from('t1')
            ->where('id', '1')
            // this will add the clause like you want
            ->where("(`c1` LIKE '%$sSearch%' OR `c2` LIKE '%$sSearch%')", NULL, FALSE)
            ->get();

これにより、必要なクエリが出力されます。

SELECT id, c1, c2 FORM t1 WHERE id ='1' AND (c1 LIKE '%3%' OR c2 LIKE '%3%')
于 2012-07-17T16:59:10.810 に答える
0

あなたの英語はわかりにくいので、私はこれに挑戦しています...

%キーワードの前または後にワイルドカードを使用して LIKE を使用しようとしていると仮定しています..

like または or_like. 内で before、after、both(デフォルト) を使用してこれを行うことができます。

<?php
$this->db
     ->select('id, c1, c2')
     ->from('t1')
     ->where('id', '1111')
      //$this->db->like('title', 'match', 'before'); 
      //Produces: WHERE title LIKE '%match'  
      //$this->db->like('title', 'match', 'after'); 
      //Produces: WHERE title LIKE 'match%' 
      //$this->db->like('title', 'match', 'both'); 
      //Produces: WHERE title LIKE '%match%'
     ->like('c1', $sSearch)
     ->or_like('c2', $sSearch)
     ->get();

または、生のSQLで実行できます - http://codeigniter.com/user_guide/database/queries.html

<?php $this->db->query("YOUR SEQUEL STATEMENT HERE");
于 2012-07-17T16:47:29.163 に答える