使用 PHP/CodeIgniter 显示具有多对多关系的两个表中的数据

2024-03-04

我正在两个表之间建立简单的连接 - 第一个名为 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(使用前将#替换为@)

使用 PHP/CodeIgniter 显示具有多对多关系的两个表中的数据 的相关文章

  • 颠倒句子中的“英语”单词

    我有一个字符串 其中可能使用多种语言 例如 and this is in English this is going to be continued 我只想反转英语单词 所以结果应该是这样的 English in is this and c
  • 我什么时候应该创建数据库索引? [复制]

    这个问题在这里已经有答案了 何时为表设置索引 是在创建表期间还是在性能调优时 索引的优点和缺点是什么 许多 大多数 DBMS 使用索引来支持唯一约束 始终创建索引以强制执行唯一约束 它们 约束 对于数据库的正确操作至关重要 如果您可以选择如
  • SQL Server 如何查看日期是否为当前月份?

    我有一个Ticket Date格式为的列YYYY MM DD HH MI SS 我想检查是否Ticket date是在当前月份 到目前为止我有 Ticket date gt 2015 04 01 and Ticket date lt 201
  • MySQL 布尔模式匹配对中间词不返回任何内容

    我在 MySQL 数据库中使用 Match Against 时遇到问题 希望有人能提供帮助 这是我的数据库中的数据示例 id name 1 really bitter chocolate 2 soft cheese 当我运行此查询时 SEL
  • Woocommerce:添加第二个电子邮件地址不起作用,除非收件人是管理员

    我尝试了多种方法来向 Woocommerce 电子邮件添加其他收件人 但它似乎仅适用于主要收件人是管理员的测试订单 这些是我尝试过的片段 如果订单的客户是管理员 则电子邮件将发送到这两个地址 如果订单包含客户电子邮件地址 则仅发送至该电子邮
  • PHP 中如何处理重复的表单输入?

    我有一个通过电子邮件发送 php 脚本的表单 网站的上下文使我有必要在用户单击按钮时添加重复的表单字段 如何正确处理表单输入 例如 我有一个车辆表单 当用户单击 添加车辆 时 我会附加几个车辆表单组的副本 这些表单输入具有相同的 名称 并且
  • 提交后如何重置表单?

    我有一个简单的表格 假设它需要一个电子邮件地址 提交表单后 消息堆栈会通知用户其地址已成功提交 问题是 提交地址后 带有电子邮件的表单字段仍然包含用户输入的电子邮件地址 我该如何重置该字段 我必须为此使用 JavaScript 吗 谢谢 w
  • 如何在嵌套集中查找特定 level2 节点的特定子节点

    我有一个标准的嵌套集模型 每个节点都有 name lft 和 rgt 属性 我可以使用以下方法找到特定员工的上级 SELECT P2 FROM Personnel AS P1 Personnel AS P2 WHERE P1 lft BET
  • PHP中如何判断字母是大写还是小写?

    我有 UTF 8 格式的文本 也带有变音符号 并且想检查该文本的第一个字母是大写还是小写 这个怎么做 function starts with upper str chr mb substr str 0 1 UTF 8 return mb
  • 通过 PHP 将 CSV 导入 MYSQL

    我正在将 CSV 文件导入到我的管理区域 并且我想将文件添加到我的数据库中 我的 PHP 代码import php is
  • 当我刷新页面时,错误显示:“无法对表达式的结果使用 isset()(您可以使用“null!==表达式”代替)”

    有人可以帮助我解决这个问题 该问题指出 Fatal error Cannot use isset on the result of an expression you can not use isset on the result of a
  • PHP while 语句回显重复项

    我是 PHP 新手 我花了几个小时研究并试图找出我做错了什么 我正在连接多个表 以使用交易表中的多个交易填充客户配置文件页面 页面的其余部分按预期处理查询 但是当使用 while 语句时 结果中的每个事务的重复次数等于结果中的事务总数 例如
  • PHP 会话不会在每个请求上延长 Cookie 过期时间

    session start 是否应该通过 session gc maxlifetime 变量来延长会话 ID cookie 的寿命 我的 session gc maxlifetime 是 24 分钟 每个会话仅存活 24 分钟 无论网站上有
  • 通过 PHP 脚本重新启动 Nginx

    我目前正在努力使我的 WordPress 插件与 nginx 兼容 该插件需要访问 conf文件在wp content uploads目录 以便它可以添加所需的规则 目前 它更新了 htaccess文件位于同一目录中 更改立即生效 无需干预
  • PHP清晰度卷积矩阵

    我正在使用一个卷积矩阵 http www php net manual en function imageconvolution php为了锐度PHP GD我想改变清晰度 level 我会去哪里做出改变如果我想做到的话或多或少尖锐 imag
  • Mysql 更快的 INSERT

    好的 我有大约 175k 个 INSERT 语句 相当大的 INSERT 语句 例如 INSERT INTO gast ID Identiteitskaartnummer Naam Voornaam Adres Postcode Stad
  • 如何编写具有这种不寻常匹配标准的联接?

    我想要 左连接 一个表 以便值不仅连接到匹配行 而且还连接到任何后续的非匹配行 直到下一个匹配行 换句话说 我想用之前的非空值来填充空值 样本数据和期望结果 Table x id 1 2 3 4 5 Table y id val 1 a 4
  • 参考指南:这个符号在PHP中是什么意思? (PHP 语法)

    这是什么 这是关于 PHP 语法时不时出现的问题的集合 这也是一个社区 Wiki 因此邀请每个人参与维护此列表 为什么是这样 过去很难找到有关运算符和其他语法标记的问题 主要思想是提供 Stack Overflow 上现有问题的链接 这样我
  • 2 同一个表的同一列上的 PostgreSQL 索引 - 冗余吗?

    我有一个带有 2 个索引的 PostgreSQL 表 其中一项指数涵盖website id and tweet idcolumns 是唯一的 B 树索引 第二个索引仅涵盖website id列 并且是非唯一索引 如果第一个索引存在 第二个索
  • PHP mysql 选择连接

    我有这个功能 以某种形式显示自动建议 function searchbyId params input strtolower params input len strlen input limit isset params limit in

随机推荐

  • Travis 无法构建 Android 项目,没有 local.properties

    事情是这样的 我已经在 Travis CI 上构建了我的项目好几次了 但每次都会遇到同样的问题 错误日志 What went wrong A problem occurred evaluating root project LiteRead
  • Eclipse 在 Ctrl-S 上跳转到函数名称

    当我按 Ctrl S 将 Java 文件保存在 Eclipse 中时 它会跳转到函数名称 这很烦人 有人知道该怎么办吗 转到 窗口 gt 首选项 gt 常规 gt 按键 您也可以搜索Keys在主首选项窗口中 您很可能添加了一个绑定 当您按下
  • 创建圆形鼠标悬停饱和效果

    我有两个版本的图像 去饱和版本和全彩版本 我想要实现的是悬停效果 其中将鼠标悬停在去饱和图像上会显示图像的彩色版本的圆圈 这有点像将聚光灯照射在饱和度降低的图像上以显示其颜色 然后 当您将鼠标移开时 它会淡回到不饱和状态 我知道我可能可以使
  • 如何扩展 OAuth2 主体

    我们正在开发一个将 OAuth 2 用于两个用例的应用程序 访问后端微服务 使用client credentials 验证应用程序的用户 使用authorization code 因此将用户重定向到 Keycloak 进行登录 大致配置如下
  • 新手入门:ruby 中的实例变量?

    请原谅这个新手问题 但为什么 game score 总是为零 bowling rb class Bowling game score 0 def hit pins game score game score pins end def sco
  • 如何在Python中调用同一类的不同实例?

    我是Python新手 我正在 SimPy 中编写一个模拟来对生产线进行建模 如下所示 机器 1 gt 缓冲区 1 gt 机器 2 gt 缓冲区 2 gt 等等 我的问题 我有一个类 Machine 其中有多个实例 假设当前实例是机器 2 该
  • 如何在 Google App Engine 上用 Python 解析 xml

    为了这以下 XML http www boardgamegeek com xmlapi boardgame 13 如何获取 xml 然后解析它以获取值
  • 使用 fscanf() 与 fgets() 和 sscanf()

    在 实用 C 编程 一书中 我发现结合了fgets and sscanf 用于读取输入 然而 在我看来 仅使用以下方法就可以更轻松地实现相同的目标fscanf 功能 来自书中 想法 而不是示例 int main int age weight
  • HighCharts 动态改变图表类型

    在 ASP NET 站点中使用 HighCharts 2 2 3 看http jsfiddle net wergeld TDLvc http jsfiddle net wergeld TDLvc 代码示例 我的网站设置与 jsFiddle
  • 核心数据 NSManagedObject - 跟踪属性是否更改

    我有一个对象 Config 我想知道是否Account属性上Config已经改变 当这种情况发生时 我想发送一个NSNotification这样所有关心何时的代码Account变化就会知道 我最初的想法是在我的NSManagedObject
  • 哈希映射宏拒绝类型检查,失败并出现误导性(并且看似有缺陷)的错误消息?

    我这里有这两个相关的宏 macro export macro rules hash map key expr gt value expr gt use std iter FromIterator std collections HashMa
  • C 中常量表达式的详细内容是什么?

    C 定义了至少 3 个级别的 常量表达式 常量表达式 非限定 算术常量表达式 整型常量表达式 6 6 第 3 段如下 常量表达式不得包含赋值 递增 递减 函数调用 或逗号运算符 除非它们包含在不存在的子表达式中 评价 那么这是否意味着1 2
  • 如何测试不太可能发生的并发场景?

    例如 这样的地图访问 func pool fPool fetch url string ResultPromise pool cacheLock RLock if rp pres pool cache url pres pool cache
  • 有没有办法覆盖 pytest (python) 中的默认断言?

    我想在每次调用断言时将一些信息记录到文件 数据库中 有没有办法在每次调用断言时覆盖断言或注册某种回调函数来执行此操作 问候 沙拉德 尝试超载AssertionError代替assert 原始断言错误可在异常模块 https docs pyt
  • WPF 是否有按住手势?

    WPF 是否有按住手势 我找不到相关的事件 所以我尝试为自己实现一个 我知道有Stylus类但在 WPF 中它对我没有帮助 如果没有 那就是我的代码 using System using System Collections Generic
  • Array.Empty():为什么 Rider 显示已发生分配,但 BenchmarkDotNet 却没有?

    第一张图片中使用的记忆工具来自 Rider 据我所知 它显示了托管堆的分配 第二张图显示了 BenchmarkDotNet 的结果 为什么 Rider 显示已进行分配 但 BenchmarkDotNet 表明未对堆进行分配 如果我改用下面的
  • 使用水晶报表中的公式更改文本对象的颜色

    I want to change the color of the text in text object using formula in Crystal Report I tried like If mnth ttx weight gt
  • stat_smooth gam 与 gam {mgcv} 不同

    我当时用的是stat smooth函数于ggplot2 决定我想要 拟合优度 并为此使用了 mgcv GAM 我突然想到我应该检查以确保它们是同一型号 stat smooth与 mgcv 相比gam 所以我使用下面的代码来检查 看起来 他们
  • 使用 javascript 显示过去 3 个月的下拉列表

    我正在尝试使用下拉列表中的 javascript 显示当月的最后 3 个月 包括总共四个月 function writeMonthOptions var months new Array 01 02 03 04 05 06 07 08 09
  • 使用 PHP/CodeIgniter 显示具有多对多关系的两个表中的数据

    我正在两个表之间建立简单的连接 第一个名为 users 的表具有字段 编号 名称 第二个名为 groups 的表具有相同的字段 编号 名称 它们之间的关系是多对多的 因为一个用户可以属于多个 感兴趣的 组 并且一个组将包含多个用户 所以我有