2017-09-08 1 views
1

Wie schreibe ich where_in Anweisung eine Unterabfrage mit codeigniter aktiven Datensätzen?CodeIgniter Active Records wo in Unterabfrage

$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(); 

Jetzt, wie die obige Abfrage in aktive CI-Datensätze konvertieren?

Ich habe versucht:

$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(); 

Aber es funktioniert nicht.

+0

Wenn es möglich ist, gibt es keinen Vorteil. Es ist nicht portabler als es war, wenn Sie die Abfrage-Methode verwenden. –

+0

@BrianGottier Nun meine Abfrage ist nur ein Beispiel, mein aktueller Code ist viel länger und mehr Tabelle und Spalte, dass es ein bisschen schwerer zu lesen, mit aktiven Aufzeichnungen (wenn es die gleiche Geschwindigkeit hat), wird besser und einfacher lesen. – Charas

+0

Wenn Ihre Abfrage viel länger und komplexer ist, klingt es so, als müssten Sie nur Formatierung/Einrückung verwenden, um das Lesen zu erleichtern. –

Antwort

1

Probieren Sie diese

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

, wenn Sie falsch verwenden, dann wird es

Apostrophe aus where_in Zustand entfernen
+0

"Falsch"!, Verdammt, genau das, was ich suche, wusste nicht, dass es dieses Argument gibt. Vielen Dank! – Charas

+0

Sie können auch 'false' in' select', 'from' wie in jedem aktiven Datensatz verwenden, dann wird' single quote' aus aktiven Datensätzen entfernt. und willkommen –

0

Sharmas Antwort die Arbeit machen sollte, aber wenn Sie voll Query Builder Methoden unterstützt möchten, können Sie diese

versuchen
$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

Sie können Ihren Code wie folgt ändern.

Ändert Ihre Anfrage

$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(); 

Ich hoffe, dies wird Ihnen hilft. Vielen Dank!