deader 发表于 2011-10-24 08:38:25

mysql 多对多,三表查询

本帖最后由 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);

自己给自己留个记号。                              

credochen 发表于 2011-10-24 09:44:33

昨天刚开始接触CI,发现在这论坛里面有不少东西可以学习的!

deader 发表于 2011-10-24 11:47:28

最近写了很多的代码,才发现合理的数据库规划与设计时多么重要:lol

att555 发表于 2011-10-24 16:41:14

好代码,感谢分享!
页: [1]
查看完整版本: mysql 多对多,三表查询