2017-09-22 2 views
1

Ich habe zwei Tabellen in meiner Datenbank instructors und courses. Ich möchte sie verbinden und aus diesem Grund schrieb diesen CodeSQL-Befehl wird nicht ordnungsgemäß ausgeführt

$this->db->join('instructors', 'instructors.id = courses.instructor_id', 'left'); 
$query = $this->db->get_where('courses', array('courses_slug' => $slug)); 
return $query->row_array(); 

Dieser Code bedeutet:

SELECT * FROM `courses` LEFT JOIN `instructors` ON `instructors`.`id` = `courses`.`instructor_id` WHERE `courses_slug` = 'abituriyent-hazirligi' 

Aber wenn ich diesen Code schreiben zu überprüfen:

$data['courses'] = $this->popular_courses_model->get_popular_courses($slug); 
echo $data['courses']['id']; 
die(); 

Er schreibt die Ausbilder ID, nicht ID des Kurses. Wo kann das Problem sein? Danke im Voraus.

+0

Welche Rahmen verwenden Sie? –

+0

Codeigniter3 framework –

+0

'$ data ['courses'] = ...' sieht komisch aus ... Wenn die Funktion Zeilen zurückgibt, macht dein 'echo' keinen Sinn für mich. Versuchen Sie, den Rückgabewert der Funktion zu verwerfen und sie vollständig anzusehen. – ficuscr

Antwort

0

Bei der Verwendung von Verknüpfungen Sie explizit aufrufen sollten, welche Spalten Sie wie zurückgegeben werden sollen:

$select = "c.id, c.name, c.instructor_id, i.name instructor_name"; 

return $this->db->select($select) 
//equivalent to "instructors as i" 
->join('instructors i', 'i.id = c.instructor_id', 'left') 
->where('c.courses_slug', $slug) 
//equivalent to "courses as c" 
->get('courses c')->row_array(); 
+0

Vielen Dank! –

+0

kein Problem! Wenn Sie fortfahren, wird diese Übung im Allgemeinen Ihre Abfragen beschleunigen, denn je mehr Verbindungen Sie hinzufügen, desto langsamer wird es auf lange Sicht und je mehr Sie über die Abfrage nachdenken, desto schneller wird alles verarbeitet –

1

Sie verbinden zwei Tabellen mit gleichnamigen Spalten ('id'). Sie müssen in Ihrer Auswahl für die Spalten spezifisch sein und bei Bedarf umbenennen ('AS').

select courses.id as course_id, instructor.id as instructor_id, ... 
+0

Aber ich muss alles für Kurse Seite auswählen. Soll ich alle Spalten schreiben? –

+0

Ich bin skeptisch. Behandelt das ORM das nicht? Ich sehe bereits die in der Abfrage verwendeten Tabellenpräfixe. Angenommen, wenn * das * "code means" bedeutet, was OP meint, dass es bedeutet ... – ficuscr

+0

Sie können es mit Kursen abkürzen. *, Aber Sie müssen die Duplikate so behandeln, wie Sie sie brauchen. – user3720435

Verwandte Themen