2012-06-13 7 views
14

Ich habe die folgende mysql-Abfrage. Könnten Sie mir bitte sagen, wie ich die gleiche Abfrage in Codeigniters Art schreiben soll?Verwendung von Mysql WHERE IN-Klausel in Codeigniter

SELECT * FROM myTable 
     WHERE trans_id IN (SELECT trans_id FROM myTable WHERE code='B') 
     AND code!='B' 
+0

haben Sie Unterabfrage in codeigniter verwenden, wie ich –

+1

Ja geschrieben, ich habe es geschafft vor erfolgreich wenigen Minuten zu nutzen .. :) Danke :) –

+0

@raheelshan. Würden Sie bitte diesen Beitrag lesen. http://stackoverflow.com/q/11045611/1209690 Danke :) –

Antwort

25

Sie können Unterabfrage Art von Codeigniter verwenden, um dies für diesen Zweck tun müssen Sie codeigniter hacken. wie dies
zu System/Datenbank Go/DB_active_rec.php öffentliches oder geschütztes Stichwort entfernen aus diesen Funktionen in verfügbar

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

Jetzt subquery Schreiben Und jetzt ist hier Ihre Abfrage mit aktiver Datensatz

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

Und das Ding ist fertig. Prost!!!
Hinweis: Während Unterabfragen verwenden, müssen Sie

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

statt

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

verwenden, die die Abfrage ausgeführt wird.
Dit zu

How can I rewrite this SQL into CodeIgniter's Active Records?

Hinweis: In Codeigntier 3 diese Funktionen sind bereits öffentlich, so dass Sie sie nicht hacken müssen.

0

versuchen Sie dies:

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

ist nicht aktiv Rekord aber ist der Weg der codeigniter http://codeigniter.com/user_guide/database/examples.html siehe Standard Query mit mehreren Ergebnissen (Array Version) Abschnitt

7

Versuchen Sie dieses:

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

Hinweis: $ this-> db-> select ("*"); ist optional, wenn Sie alle Spalten aus Tabelle auswählen

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

Das passt meinem Bedarf perfekt, danke! – Nebri