web-dev-qa-db-ja.com

codeigniterアクティブレコードの左結合

Mysqlテーブルが3つあります。

Table 1 user  
id | name  

Table 2 emails  
id | email  

Table 3 user_email  
user_id | email_id  

複数テーブルのクエリの経験がありません。
codeigniterアクティブレコードを使用して、ユーザーIDに基づいてユーザーのメールアドレスを検索したいのですが、以下のコードが正しいかどうかをアドバイスしますか?

$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

テーブルのuser_idを比較する必要があるwhere句が間違っています。メールのidを指定された$user_idと比較しています

$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(); 

より便利な方法は、同じ列を持つテーブルに混乱が生じないようにテーブルにエイリアスを与えることです。

$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