2014-05-06 123 views
17

我有3个mysql表。codeigniter活动记录左加入

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

回答

28

你有错where子句您需要从表中比较USER_ID,你的电子邮件的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(); 
+0

无法正常工作。表1 ID是用户ID。表2 id是电子邮件ID,它与表1无关。表3 user_id与表1有关。表3 email_id与表2有关。 – user1884324

+0

@ user1884324再次阅读我的查询我还没有加入您的用户表,我有只加入了'emails'表和'user_email',在你的查询中,你比较了'$ user_id'和电子邮件的ID,如果你想查找用户的电子邮件,然后使用上面的查询,你需要匹配'user_id '从'user_email'我希望你能得到我的观点 –

+1

谢谢,它需要我花一些时间来消化它。 – user1884324