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 加入多对多限制的主要内容,如果未能解决你的问题,请参考以下文章