用户
 找回密码
 入住 CI 中国社区
搜索
查看: 9303|回复: 3
收起左侧

mysql 多对多,三表查询

[复制链接]
发表于 2011-10-24 08:38:25 | 显示全部楼层 |阅读模式
本帖最后由 deader 于 2011-10-24 08:42 编辑

多对多,三表联查: 查主表,LEFT JOIN关系表,再LEFT JOIN第三表,最后按关系表中的“主表ID”进行 GROUP BY。
         
GROUP_CONCAT(groups.name SEPARATOR ' | ') AS name 进行重复项合并。

例如:
users:主表
users_groups:关系表
groups:第三表(可根据实际需要 变成“主表”)

$this->db->select("users.*, GROUP_CONCAT(groups.name SEPARATOR ' | ') AS name ");
$this->db->from('users');
$this->db->join('users_groups','users.id = users_groups.user_id','LEFT');
$this->db->join('groups','users_groups.group_id = groups.id','LEFT');
$this->db->group_by('users_groups.user_id');
return $this->db->get();               
        
用sql就是

$sql = "SELECT us.* ,GROUP_CONCAT(gs.name SEPARATOR ' | ') AS name
    FROM users us
    LEFT JOIN users_groups ug
    ON us.id = ug.user_id
    LEFT JOIN groups gs
    ON ug.group_id = gs.id
    GROUP BY ug.user_id
    ";
   return $this->db->query($sql);

自己给自己留个记号。                                

发表于 2011-10-24 09:44:33 | 显示全部楼层
昨天刚开始接触CI,发现在这论坛里面有不少东西可以学习的!
 楼主| 发表于 2011-10-24 11:47:28 | 显示全部楼层
最近写了很多的代码,才发现合理的数据库规划与设计时多么重要
发表于 2011-10-24 16:41:14 | 显示全部楼层
好代码,感谢分享!

本版积分规则