codeigniter 加入多对多限制

Posted

技术标签:

【中文标题】codeigniter 加入多对多限制【英文标题】:codeigniter join many to many LIMIT 【发布时间】:2013-06-18 11:24:42 【问题描述】:

我有三张桌子:

products: model_id, model(unique),
groups: group_id, code(unique), 
products_groups: pg_id, model_id_fk, group_id_fk

products_groups 表用于表“产品”和“组”之间的“多对多”关系。

我的左连接:

$this->db->select('model_id, model, code');
$this->db->from('products');
$this->db->join('products_group', 'products_group.model_id_fk = products.model_id', 'left');
$this->db->join('groups', 'groups.group_id = products_groups.group_id_fk', 'left');
$query = $this->db->get()->result_array();

结果:

|-------------------------|
| model_id | model | code |
|-------------------------| 
| 0        | 1000  | 15   | 
| 0        | 1000  | 20   | 
| 0        | 1000  | 30   | 
| 1        | 2000  | 15   | 
| 1        | 2000  | 20   |
|-------------------------|

我想要什么:

|-------------------------------|
| model_id | model | code       |
|-------------------------------|
| 0        | 1000  | 15,20,30   |
| 1        | 2000  | 15,20      |
|-------------------------------|

解决方案(?): 想到的第一件事是按 products.model_id 排序,然后逐行检查结果,合并具有相同 'model_id' 的行并连接它们的 'code' 值。

问题: 我想做分页,如果我对查询做限制,行的合并会弄乱行数。

所以我需要建议,我该怎么做?

附:这只是信息的一部分,“产品”表与第二个表还有一个“多对多”关系,与第三个表有“一对多”关系。也许会再添加一个“多对多”关系。

【问题讨论】:

哇哦,桌子乱了,我会换的。 现在可以读取表格了。 你试过按model_id $this->db->group_by('model_id')分组吗? @Rolice 并申请 GROUP_CONCAT(code) 是的@Stephan,我只是提出了一个提示。 :D 【参考方案1】:

groupby model_id 和 group_concat by code

【讨论】:

你给出了最完整的答案。【参考方案2】:

使用 GROUP_CONCAT

GROUP_CONCAT(`groups`.`code`) AS "codes"

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

【讨论】:

我得到一行:型号:1000 代码:15,20,30 我浏览了网页但没有找到解决方案。

以上是关于codeigniter 加入多对多限制的主要内容,如果未能解决你的问题,请参考以下文章

教义加入多对多没有关联

完全加入多对多字段 Django

Flask 数据库多对多关系

EF Core多对多查询加入3个表

核心数据。加入 2 个具有多对多关系的表?

SQL 查询 - 加入多对多关系,有选择地过滤/加入