2017-07-29 2 views
1

Hallo alle ich versuche, eine Unterabfrage in Codeigniter ausführen. Und ich habe dies getanWie Unterabfrage in CI

$this->db->where('id NOT IN (SELECT friend_id FROM friend_list WHERE user_id = '$id')'); 

Meine Funktion wie diese

public function get_all_users() 
{ 

    $id=$this->session->userdata['user_id']; 
    $this->db->select("id,username"); 
    $this->db->where('id NOT IN (SELECT `friend_id` FROM `friend_list` WHERE `user_id` = '$id')'); 
    $this->db->where('id !=2'); 
    $this->db->from('users'); 
    $query=$this->db->get(); 

    if ($query->num_rows() > 0) 
    { 
     return $query->result(); 
    } 

    return false; 
} 

aussieht, aber es kehrt diesen Fehler

Message: syntax error, unexpected '$id' (T_VARIABLE), expecting ',' or ')'. 

Wenn ich einen Wert in Tempo von $ id setzte dann gibt es Ergebnis. Wie kann ich das lösen? Bitte hilf mir.

+1

Escape-Zitate oder gemischten Fall verwenden '$ this-> db-> where ("id NOT IN (SELECT friend_id FROM friend_list WHERE user_id = '$ id')");' – Tpojka

+0

Codeigniter gebaut hat, wo nicht in https://www.codeigniter.com/user_guide/database/query_builder.html?highlight=where_not_in#CI_DB_query_builder::where_not_in – user4419336

+0

@Tpojka Danke :) –

Antwort

1

Zuerst müssen Sie Bibliothek für Unterabfrage enthalten:

$this->load->library('subquery'); 

dann Ihre Abfrage so:

Dies ist, wie wir Sub-Abfrage in CI Methode 1 schreiben:

$this->db->where('id NOT IN (SELECT `friend_id` FROM `friend_list` WHERE `user_id` = '$id')', NULL, FALSE); 

ODER Sie können auch so schreiben: Methode 2:

$this->db->select('id,username')->from('users'); 
$sub = $this->subquery->start_subquery('where_in'); 
$sub->select('friend_id')->from('friend_list'); 
$sub->where('user_id', $id); 
$this->subquery->end_subquery('id', FALSE); 

Sie diese Referenz überprüfen: subquery in codeigniter active record

+0

Ich möchte nur klarstellen, dass, wenn Sie die zweite Option verwenden möchten, müssen Sie diese [Bibliothek] (http://labs.niticompassinc.com/CodeIgniter-Subqueries/) zu Ihrem CI-Setup hinzufügen. Weil CI keine "$ this-> subquery-> start_subquery" -Funktion hat, soweit ich weiß. –

+0

@disha Die Unterabfrage ist eine Bibliothek, die geladen werden muss, bevor die Unterabfrage-Methoden verwendet werden – cyberrspiritt

+0

@cyberrspiritt: yes. Wir müssen eine Bibliothek für die Unterabfrage hinzufügen. Das heißt: $ this-> load-> library ('Unterabfrage'); – disha

1

Sie haben vergessen, gleiche (single) zu entkommen zitiert:

Sie schreiben sollte es so:

$this->db->where('id NOT IN (SELECT `friend_id` FROM `friend_list` WHERE `user_id` = \'$id\')'); 

oder

$this->db->where('id NOT IN (SELECT `friend_id` FROM `friend_list` WHERE `user_id` = ' . $id . ')'); 

oder

$this->db->where("id NOT IN (SELECT `friend_id` FROM `friend_list` WHERE `user_id` = '$id')");