2017-09-08 3 views
1

Comment écrire une instruction where_in dans une sous-requête en utilisant des enregistrements actifs de codeigniter?CodeIgniter Active Records où dans la sous-requête

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

Maintenant, comment convertir la requête ci-dessus en enregistrements actifs CI?

J'ai essayé:

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

Mais cela ne fonctionne pas.

+0

Si cela est possible, il n'y a aucun avantage. Ce n'est pas plus portable que lorsque vous utilisez la méthode de requête. –

+0

@BrianGottier Eh bien ma requête est juste un exemple, mon code actuel est beaucoup plus long et plus de table et de colonne qu'il devient un peu plus difficile à lire, avec des enregistrements actifs (si elle a la même vitesse), sera plus facile et plus facile lire. – Charas

+0

Si votre requête est beaucoup plus longue et complexe, il semble que vous ayez juste besoin d'utiliser le formatage/indentation pour la rendre plus facile à lire. –

Répondre

1

Essayez cette

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

si vous utilisez de faux alors il va supprimer les apostrophes de where_in état

+0

"faux" !, damnit, exactement ce que je cherche, ne savait pas il y a cet argument. Je vous remercie! – Charas

+0

vous pouvez également utiliser 'false' dans' select', 'from' comme dans tout enregistrement actif puis il supprimera' single quote' des enregistrements actifs. et bienvenue –

0

Sharmas La réponse devrait faire le travail, mais si vous le souhaitez des requêtes entièrement pris en charge Builder méthodes que vous pouvez essayer

$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

Vous pouvez modifier votre code en tant que solution suivante.

change votre requête

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

J'espère que cela vous aide. Merci!