我正在两个表之间建立简单的连接 - 第一个名为 users 的表具有字段:
||编号 ||名称||
第二个名为 groups 的表具有相同的字段:
||编号 ||名称||
它们之间的关系是多对多的,因为一个用户可以属于多个(感兴趣的)组,并且一个组将包含多个用户。所以我有第三个表用户组,其中包含字段:
||用户 ID ||组 ID ||
两者都是外键,一个用于用户,一个用于组。
我们的目标是列出一份包含所有团体和参与每个团体的人员的名单。
为此我提出了疑问:
$q = $this->db->query('SELECT u.name FROM users u
JOIN user_group ug ON u.id = ug.user_id
JOIN groups g ON g.id = ug.group_id WHERE ug.group_id = "4" ');
然后使用活动记录修改它:
$this->db->select('users.name');
$this->db->from('users');
$this->db->join('user_group', 'user_group.user_id = users.id');
$this->db->join('groups', 'groups.id = user_group.group_id');
$this->db->where('user_group.group_id', 3);
$q = $this->db->get();
这样我就可以通过给定组表中的“id”来获取任何组的用户。但我不知道如何让它显示两者 - 组的名称以及参与的用户。当我从表中创建和删除时,id 变得非常无序,我可能有 20 个组,而某些组可能有 id = 53,因此从 1 循环到 number_of_groups 还不够好。有什么方法可以做到这一点?
谢谢
莱龙
您无法在一个查询中获取该组以及该组中的所有用户。您可以在一个查询中获取每个组的串联用户列表
SELECT g.group_name, GROUP_CONCAT(u.fullname)
FROM group g
JOIN user_group ug ON g.id = ug.id
JOIN user u ON ug.user_id = u.id
GROUP BY g.id
group => user 是多对多关系,因此组中的用户将为用户返回多行。
如果您还需要用户详细信息列表而不是串联表单。
您可以遍历组列表,然后将一个键添加到users
.
$groups = $this->db->get('groups')->result();
foreach($group as &$g){
$this->db->select('users.name');
$this->db->from('users');
$this->db->join('user_group', 'user_group.user_id = users.id');
$this->db->where('user_group.group_id', $g->id);
$g->users = $this->db->get()->result();
}
现在你循环遍历$group
并可以通过以下方式访问用户$group->users
请注意&
before $g
在 foreach 循环中。由于 foreach 对所传递的变量的副本进行操作,因此您已传递了对其的引用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)