2017-09-22 1 views
1

J'ai deux tables dans ma base de données instructors et courses. Je veux les rejoindre et pour cette raison écrit ce codecommande SQL ne s'exécute pas correctement

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

Ce code signifie:

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

Mais quand j'écris ce code pour vérifier:

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

Il écrit les instructeurs id, pas id du cours. Où peut être le problème? Merci d'avance.

+0

Quel cadre utilisez-vous? –

+0

Codeigniter3 framework –

+0

'$ data ['courses'] = ...' semble bizarre ... Si la fonction retourne des lignes alors votre 'echo' n'a aucun sens pour moi. Essayez de vider la valeur de retour de la fonction et de la regarder en entier. – ficuscr

Répondre

0

Lors de l'utilisation des jointures vous devez appeler explicitement les colonnes que vous souhaitez renvoyer comme:

$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

Merci beaucoup! –

+0

pas de problème! Au fur et à mesure que vous avancez, cette pratique accélérera en général vos cahiers, car plus vous joignez de jointures, plus elle ralentit à long terme et plus vous réfléchissez à la requête, plus vite tout va bien. –

1

Vous joignez deux tables avec des colonnes du même nom ('id'). Vous devez être spécifique dans votre sélection pour les colonnes et renommer ('AS') si nécessaire.

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

Mais je dois tout sélectionner pour la page des cours. Dois-je écrire toutes les colonnes? –

+0

Je suis sceptique. L'ORM ne gère-t-il pas cela? Je vois déjà les préfixes de la table utilisés dans la requête. Supposons que cela dépende de * que * signifie "code", ce que OP pense que cela signifie ... – ficuscr

+0

Vous pouvez le raccourcir avec des cours. *, Mais vous devez gérer les doublons comme vous en avez besoin. – user3720435