web-dev-qa-db-fra.com

Utilisation de la clause Mysql WHERE IN dans codeigniter

J'ai la requête mysql suivante. Pourriez-vous s'il vous plaît me dire comment écrire la même requête à la manière de Codeigniter?

SELECT * FROM myTable 
         WHERE trans_id IN ( SELECT trans_id FROM myTable WHERE code='B') 
         AND code!='B'
17
black_belt

Vous pouvez utiliser le mode sous-requête de codeigniter pour ce faire, vous devrez pirater codeigniter. comme ça
Accédez à system/database/DB_active_rec.php Supprimer le mot clé public ou protégé de ces fonctions

public function _compile_select($select_override = FALSE)
public function _reset_select()

Maintenant, l'écriture de sous-requête est disponible Et maintenant, voici votre requête avec enregistrement actif

$this->db->select('trans_id');
$this->db->from('myTable');
$this->db->where('code','B');
$subQuery = $this->db->_compile_select();

$this->db->_reset_select();
// And now your main query
$this->db->select("*");
$this->db->where_in("$subQuery");
$this->db->where('code !=', 'B');
$this->db->get('myTable');

Et la chose est faite. À votre santé!!!
Remarque: Lorsque vous utilisez des sous-requêtes, vous devez utiliser

$this->db->from('myTable')

au lieu de

$this->db->get('myTable')

qui exécute la requête.
Regardez aussi

Comment puis-je réécrire ce SQL dans les enregistrements actifs de CodeIgniter?

Remarque: dans Codeigntier 3, ces fonctions sont déjà publiques, vous n'avez donc pas besoin de les pirater.

25
Muhammad Raheel
$data = $this->db->get_where('columnname',array('code' => 'B'));
$this->db->where_in('columnname',$data);
$this->db->where('code !=','B');
$query =  $this->db->get();
return $query->result_array();
17
areeb

Essaye celui-là:

$this->db->select("*");
$this->db->where_in("(SELECT trans_id FROM myTable WHERE code = 'B')");
$this->db->where('code !=', 'B');
$this->db->get('myTable');

Remarque: $ this-> db-> select ("*"); est facultatif lorsque vous sélectionnez toutes les colonnes du tableau

7
Code Prank

essaye ça:

return $this->db->query("
     SELECT * FROM myTable 
     WHERE trans_id IN ( SELECT trans_id FROM myTable WHERE code='B') 
     AND code!='B'
     ")->result_array();

N'est pas un enregistrement actif mais est à la manière de codeigniter http://codeigniter.com/user_guide/database/examples.html voir la section Requête standard avec plusieurs résultats (version tableau)

0
mvpasarel