Php codeigniter活动记录左连接
我有3个mysql表Php codeigniter活动记录左连接,php,codeigniter,activerecord,left-join,Php,Codeigniter,Activerecord,Left Join,我有3个mysql表 Table 1 user id | name Table 2 emails id | email Table 3 user_email user_id | email_id 我没有查询多表的经验。 使用codeigniter active record,我想根据用户id查找用户电子邮件地址,请告知以下代码是否正确 $CI->db->select('email'); $CI->db->from('emails'); $CI
Table 1 user
id | name
Table 2 emails
id | email
Table 3 user_email
user_id | email_id
我没有查询多表的经验。使用codeigniter active record,我想根据用户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();
您有错误的where子句需要比较表中的用户id,您正在将电子邮件id与提供的
$user\u 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();
@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;
您可以添加更多连接,如$join[0]。。
如果您需要选择某个特定的列,可以按以下方式定义
$select='table1.column1、table1.column2、table2.column1、table2.column2'
或者,如果您希望所有列都放置一个*
不工作。表1 id是用户id。表2 id是电子邮件id,与表1无关。表3用户id与表1相关。表3电子邮件id与表2相关。@user1884324再次阅读我的查询我没有加入您的users表,我只加入了
电子邮件表和用户电子邮件,在您的查询中,您将$user\u id
与错误的电子邮件id进行比较,如果你想找到用户的电子邮件,那么使用上面的查询,你需要匹配user\u email
中的user\u id
,我希望你明白我的观点,如何使用foreach在表中显示select和left join?tnxx
$this->join_records($table, $joins, $where, $select);