codeigniter 活动记录左连接

Posted

技术标签:

【中文标题】codeigniter 活动记录左连接【英文标题】:codeigniter active record left join 【发布时间】:2014-06-22 14:02:21 【问题描述】:

我有 3 个 mysql 表。

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

【问题讨论】:

【参考方案1】:

您需要比较表中的 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(); 

【讨论】:

不工作。表 1 id 是用户 id。表2 id 为email id,与表1 无关。表3 user_id 与表1 相关。表3 email_id 与表2 相关。 @user1884324 再次阅读我的查询我没有加入您的用户表,我只加入了emails 表和user_email,在您的查询中,您将$user_id 与电子邮件的ID 进行比较错了,如果你想找到用户的电子邮件,那么使用上面的查询你需要匹配来自user_emailuser_id我希望你明白我的意思 如何使用 foreach 在表中显示带有左连接的选择? tnxx【参考方案2】:

@m khalid 的回答是正确的,但我创建了一个动态函数来实现与多个表的联接。看看这个。

function join_records($table, $joins, $where = false, $select = '*', $orderBy = false, $direction = 'DESC')
  $CI->select($select);
  $CI->from($table);
  foreach($joins as $join)
    $CI->join($join[0], $join[1], $join[2]);
  
  if($where) $CI->where($where);
  if($orderBy) $CI->order_by($orderBy, $direction);
  $query = $CI->get();
  return $query->result_array();

将您的问题应用于此。

$table = 'emails';

$joins[0][0] = 'user_email';
$joins[0][1] = 'user_email.user_id = emails.id';
$joins[0][2] = 'left';

$where['user_id'] = $userid;

您可以添加更多加入,例如 $join1[0].. 如果您需要选择一些特定的列,您可以通过以下方式定义 $select = 'table1.column1,table1.column2,table2.column1,table2.column2' 或者,如果您希望所有列都放一个 *

$this->join_records($table, $joins, $where, $select);

You may also find it here.

【讨论】:

以上是关于codeigniter 活动记录左连接的主要内容,如果未能解决你的问题,请参考以下文章

mysql codeigniter 活动记录 m:m 删除

MySQL - 计算行数和左连接问题

codeigniter 左连接不换行

Codeigniter 活动记录查询

活动记录 CodeIgniter 2 中的这个查询有啥问题?

Codeigniter 活动记录 - 插入点列