web-dev-qa-db-fra.com

codeigniter enregistrement actif jointure gauche

J'ai 3 tables mysql.

Table 1 user  
id | name  

Table 2 emails  
id | email  

Table 3 user_email  
user_id | email_id  

Je n'ai aucune expérience dans la requête multi-tables.
En utilisant l'enregistrement actif de codeigniter, je veux trouver l'adresse e-mail de l'utilisateur en fonction de l'ID utilisateur, veuillez indiquer si le code ci-dessous est correct?

$CI->db->select('email');
$CI->db->from('emails');
$CI->db->where('id', $userid);
$CI->db->join('user_email', 'user_email.user_id = emails.id', 'left');
$query = $CI->db->get();  
24
user1884324

Vous avez une clause Where incorrecte dont vous avez besoin pour comparer l'ID utilisateur de votre table, vous comparez l'ID de l'e-mail au $user_id Fourni

$CI->db->select('email');
$CI->db->from('emails');
$CI->db->where('user_id', $userid);
$CI->db->join('user_email', 'user_email.user_id = emails.id', 'left');
$query = $CI->db->get(); 

Un moyen plus utile consiste à donner des alias à vos tables afin que les tables avec les mêmes colonnes n'aient aucune confusion

$CI->db->select('e.email');
$CI->db->from('emails e');
$CI->db->join('user_email ue', 'ue.user_id = e.id', 'left');
$CI->db->where('ue.user_id', $userid);
$query = $CI->db->get(); 
48
M Khalid Junaid