2017-09-08 15 views
1

codeigniterアクティブレコードを使用してwhere_inステートメントにサブクエリを書くにはどうすればよいですか?CodeIgniterアクティブレコードサブクエリのどこにある

$query = $this->db->query("SELECT SUM(a.transaction_payment_amount) FROM 
     transaction_payment a WHERE a.transaction_link IN 
     (SELECT transaction_link FROM transaction WHERE transaction_type = '22'"); 
$result = $query->result(); 

ここで、上記のクエリをCIアクティブなレコードに変換する方法はありますか。

私が試してみました:

$this->db->select("SUM(a.transaction_payment_amount)"); 
$this->db->from('transaction_payment a'); 
$this->db->where_in('a.transaction_link', "SELECT transaction_link from transaction WHERE transaction_type = '22'"); 
$query = $this->db->get(); 
$result = $query->result(); 
をしかし、それは動作しません。

+0

可能であれば、メリットはありません。これは、クエリメソッドを使用するときよりも移植性がありません。 –

+0

@BrianGottierまあ、私のクエリは単なる例です。私の実際のコードは長いですし、アクティブなレコード(同じ速度を持っていれば)を読むのが少し難しくなります。読む。 – Charas

+0

クエリが長く複雑である場合は、読みやすくするために書式設定/インデントを使用する必要があるように思えます。 –

答えて

1

あなたは

+0

"false"!、damnit、まさに私が探しているのは、その議論があることを知らなかった。ありがとうございました! – Charas

+0

あなたは 'select'で' false'を使うこともできますし、 'active'レコードのように' from'を使うとアクティブなレコードから 'single quote'を削除します。と歓迎 –

0

Sharmas回答が仕事を行う必要があり、それはwhere_in状態から単一引用符を削除しますfalseを使用する場合は、この

$this->db->where_in('a.transaction_link', "SELECT transaction_link from transaction WHERE transaction_type = '22'",false); 

を試してみていますが、完全にクエリビルダメソッドをサポートしたい場合は、この

を試すことができます
$strSubQuery = $this->db 
    ->select("transaction_link") 
    ->from("transaction") 
    ->where("transaction_type",22) 
    ->get_compiled_select(); 

$query = $this->db 
    ->select("SUM(a.transaction_payment_amount)", false) 
    ->from('transaction_payment a') 
    ->where_in('a.transaction_link', $strSubQuery, false) 
    ->get(); 
0

コードを次のように変更することができます。

私はこの意志はあなたを役に立てば幸い

$this->db->select("SUM(a.transaction_payment_amount)"); 
$this->db->from('transaction_payment a'); 
$this->db->where("a.transaction_link IN (SELECT transaction_link from transaction WHERE transaction_type = '22')", null, false); 
//OR you can try other where condition if Sub query return null value than used this below query 
$this->db->where("IF(SELECT transaction_link from transaction WHERE transaction_type = '22',a.transaction_link IN (SELECT transaction_link from transaction WHERE transaction_type = '22'), NULL)", null, false); 
$query = $this->db->get(); 
$result = $query->result(); 

あなたのクエリを変更します。ありがとう!

関連する問題