2017-12-20 1 views
0

Ich brauche eine MySQL-Abfrage in aktiver Datensatz codeigniterWie eine bestimmte Bedingung in Klammern in aktiver Datensatz schreiben codeigniter

SELECT `user_id` 
FROM `tb_user_answers` 
WHERE (`question_id` = '1' AND `answer_id` = '2') 
AND (`question_id` = '2' AND `answer_id` IN (4, 6)) 
AND (`question_id` = '3' AND `answer_id` IN (8,9,10)) 

Ich habe versucht, zu konvertieren, konnte aber mit dem folgenden Code tun, dass

$this->db->select('user_id'); 
foreach($user_preference_dropdown as $dropdown){ 
    if($dropdown['question_id'] == 1 && $dropdown['answer_id'] != 0){ 
    $this->db->where('question_id',$dropdown['question_id']); 
    $this->db->where('answer_id', $dropdown['answer_id']); 
    } 
} 
foreach($user_preference_dropdown as $dropdown){ 
    if($dropdown['question_id'] == 2 && $dropdown['answer_id'] == 1){ 
    $this->db->where('question_id',$dropdown['question_id']); 
    $this->db->where_in('answer_id',[4,6]); 
    } 
} 
foreach($user_preference_dropdown as $dropdown){ 
    if($dropdown['question_id'] == 3 && $dropdown['answer_id'] == 1){ 
    $this->db->where('question_id',$dropdown['question_id']); 
    $this->db->where_in('answer_id',[8,9,10]); 
    } 
} 
foreach($user_preference_dropdown as $dropdown){ 
    if($dropdown['question_id'] == 4 && $dropdown['answer_id'] == 1){ 
    $this->db->where('question_id',$dropdown['question_id']); 
    $this->db->where_in('answer_id',[12,13]); 
    } 
} 
foreach($user_preference_dropdown as $dropdown){ 
    if($dropdown['question_id'] == 5 && $dropdown['answer_id'] == 1){ 
    $this->db->where('question_id',$dropdown['question_id']); 
    $this->db->where_in('answer_id',[16,17]); 
    } 
} 
foreach($user_preference_dropdown as $dropdown){ 
    if($dropdown['question_id'] == 6 && $dropdown['answer_id'] == 0){ 
    $this->db->where('question_id',$dropdown['question_id']); 
    $this->db->where('answer_id',19); 
    } 
} 
foreach($user_preference_dropdown as $dropdown){ 
    if($dropdown['question_id'] == 7 && $dropdown['answer_id'] == 0){ 
    $this->db->where('question_id',$dropdown['question_id']); 
    $this->db->where('answer_id',22); 
    } 
} 
foreach($user_preference_dropdown as $dropdown){ 
    if($dropdown['question_id'] == 8 && $dropdown['answer_id'] == 1){ 
    $this->db->where('question_id',$dropdown['question_id']); 
    $this->db->where('answer_id',24); 
    } 
} 
foreach($user_preference_dropdown as $dropdown){ 
    if($dropdown['question_id'] == 9 && $dropdown['answer_id'] == 1){ 
    $this->db->where('question_id',$dropdown['question_id']); 
    $this->db->where_in('answer_id',[26,27]); 
    } 
} 
$query = $this->db->get('tb_user_answers'); 

die Ausgabe der obigen Abfrage ist:

SELECT `user_id` 
FROM `tb_user_answers` 
WHERE `question_id` = '1' 
AND `answer_id` = '2' 
AND `question_id` = '2' 
AND `answer_id` IN(4, 6) 
AND `question_id` = '3' 
AND `answer_id` IN(8, 9, 10) 
AND `question_id` = '4' 
AND `answer_id` IN(12, 13) 
AND `question_id` = '5' 
AND `answer_id` IN(16, 17) 
AND `question_id` = '6' 
AND `answer_id` = 19 
AND `question_id` = '7' 
AND `answer_id` = 22 
AND `question_id` = '8' 
AND `answer_id` = 24 
AND `question_id` = '9' 
AND `answer_id` IN(26, 27) 
+1

die [Abfrage Gruppierung] prüfen (https: // www .codeigniter.com/userguide3/database/query_builder.html # Abfragegruppierung) Abschnitt der Dokumentation –

Antwort

0

ich glaube, Sie auf die Abfrage einen schlechten Ansatz haben, keine t ein Problem mit der Codierung. Funktioniert die Hauptabfrage in der Datenbank? Es macht keinen Sinn mit Klammern zu gruppieren und das Ergebnis ist das gleiche.

Sie werden nie ein Ergebnis finden, wo question_id 1 und auch question_id 2,

Ich denke, Ihre Haupt-Abfrage sein:

SELECT `user_id` 
FROM `tb_user_answers` 
WHERE (`question_id` = '1' AND `answer_id` = '2') 
OR (`question_id` = '2' AND `answer_id` IN (4, 6)) 
OR (`question_id` = '3' AND `answer_id` IN (8,9,10)) 
Verwandte Themen