透视 mysql 结果集并创建 html 表/矩阵

2023-12-09

我整晚都把头撞在墙上,但还没有解决方案,假设我有这样的 Mysql 表结构:

ID  name  value   year
 1  Tom     15     2018
 2  Tom     4      2019
 3  Tom     6      2020
 4  Kate    18     2018
 5  Kate    20     2019
    ...and so on... 

我想通过 PHP 打印如下结果,年份应该是动态的,因为它会随着时间的推移而增加。请告诉我什么是一种方法谢谢

year |2018 |2019|2020
----------------------
Tom  |  15 |  4 | 6
----------------------
Kate |  18 | 20 | ---

----- and so on --- 

my code:

<table>

<?php
$mysqli = new mysqli('localhost', 'root', '123', 'news');
$report = array();
$columnIndex = 0;
$query = $mysqli->query("SELECT name, value, year FROM Testab");
while ($results = $query->fetch_assoc()) {
    foreach ($results as $tos => $toa) {
        $report[$tos][$columnIndex] = $toa;
    }
    $columnIndex++;
}

foreach ($report as $tos => $results) { ?>
    <tr>
        <th><?php echo $tos; ?></th>
        <?php foreach ($results as $toa) { ?>
            <th><?php echo $toa; ?></th>
        <?php } ?>
     </tr>
 <?php } ?>
</table>

有很多方法可以做到这一点;一些技术涉及 SQL 来准备动态数据透视表。我下面的代码片段将使用 php 来执行数据透视。

  1. 使用 a 循环遍历结果集对象foreach()-- 不,您不需要调用获取函数来访问数据,因为结果对象是可迭代的。
  2. 创建一个多维分组数组,其中名称作为第一级键,然后创建以年份作为键、值作为值的子数组。
  3. 创造一系列独特的年份。我的方法将通过将年份指定为键和值来确保唯一性 - 因为数组不能包含重复的键,所以值将是唯一的,而无需调用array_unique() later.
  4. 对年份进行 ASC 排序
  5. 为每年创建一个默认值数组。在这种情况下,我分配-作为默认值。
  6. 添加字面意思name到包含唯一年份的数组的前面——这将用于填充表的标题行。
  7. 我更喜欢使用implode()制作可变单元格的表格行。
  8. printf()是一种将文字文本与变量混合的干净方法——它避免了插值/连接语法。
  9. 在每个后续表行中,将默认年度值替换为相关人员的年度值,并显示为implode().
  10. 如果结果集有可能为空,那么您可能需要将此片段的大部分内容包装在if ($resultObject) { ... } block.

Code: (Demo)

$grouped = [];
$columns = [];    

$resultObject = $mysqli->query("SELECT `name`, `value`, `year` FROM `Testab`");
foreach ($resultObject as $row) {
    $grouped[$row['name']][$row['year']] = $row['value'];
    $columns[$row['year']] = $row['year'];
}

sort($columns);
$defaults = array_fill_keys($columns, '-');
array_unshift($columns, 'name');

echo "<table>";
    printf(
        '<tr><th>%s</th></tr>',
        implode('</th><th>', $columns)
    );
    foreach ($grouped as $name => $records) {
        printf(
            '<tr><td>%s</td><td>%s</td></tr>',
            $name,
            implode('</td><td>', array_replace($defaults, $records))
        );
    }
echo "</table>";

输出:(添加了间距/制表符以便于阅读)

<table>
    <tr>
        <th>name</th> <th>2018</th> <th>2019</th> <th>2020</th>
    </tr>
    <tr>
        <td>Tom</td>  <td>15</td>   <td>4</td>    <td>6</td>
    </tr>
    <tr>
        <td>Kate</td> <td>18</td>   <td>20</td>   <td>-</td>
    </tr>
</table>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

透视 mysql 结果集并创建 html 表/矩阵 的相关文章

  • 联系表 7 根据用户选择立即发送给多个联系人

    您好 我正在 WordPress 联系表单 7 中创建联系表单 如果用户选择 全部 我想立即向多个收件人发送电子邮件 我看过这个 但似乎没有记录您是否可以一次发送给多个收件人http contactform7 com selectable
  • PHP,检查 URL 和文件是否存在?

    我为 WordPress 创建了一个插件 需要存在两个文件才能正常运行 第一个文件定义为文件系统路径 第二个文件定义为 URL 假设第一个文件是 home my site public html some folder required f
  • 如何使用 Julia 查找矩阵中的连通分量

    假设我有以下矩阵 此处用 Julia 语言定义 mat 1 1 0 0 0 1 1 0 0 0 0 0 0 0 1 0 0 0 1 1 将一组值为 1 的相邻元素视为一个 分量 如何识别该矩阵有 2 个分量以及每个分量由哪些顶点组成 对于矩
  • 正则表达式匹配带或不带特殊/重音字符的字符串?

    是否有正则表达式可以匹配包含或不包含特殊字符的特定字符串 可以这么说 特殊字符不敏感 Like c ra将匹配cera 反之亦然 有任何想法吗 编辑 我想匹配带有或不带有特殊 重音字符的特定字符串 不仅仅是任何字符串 字符 测试示例 cli
  • XAMPP 中的根路径

    我遇到这个问题已经有一段时间了 并且广泛寻找答案但没有成功 img src images test jpg 从 根路径 在我的例子中是在 LAMP 中的生产中 获取图像 htdocs images test jpg 无论是从 htdocs
  • 无法使用 Node.JS 将 null 值发送到 MySQL 数据库

    我正在尝试发送null使用 Node JS 到我的 MySQL 数据库 con query INSERT INTO Routes routeTrigger VALUES null title test function err result
  • 数据库字段中的空白不会被trim()删除

    我在 MySQL 的文本字段的段落开头有一些空格 Using trim var text field 在 PHP 中或TRIM text field MySQL 中的语句绝对不执行任何操作 这个空白可能是什么以及如何通过代码删除它 如果我进
  • 如何使用 php 命令使注册表单高度安全?

    我想让代码对用户来说真正安全 下面的代码显示了 php 代码 我已将其用于我的网站 现在我已经使用了一些验证 例如密码和重复密码必须匹配 并且用户必须输入所有字段 为了使其更安全 我想插入安全命令 例如 PDO mysqli crypto
  • PHP:数据库连接类构造方法

    我是面向对象编程的新手 最初 我是在类内部和构造函数外部定义变量并为其赋值 但是在今天的 Java OOP 课程之后 我被告知这是不好的风格 应该避免 这是我模拟的原始 PHP 数据库连接类 class DatabaseConnection
  • Nginx 与 phpmyadmin 登录后重定向错误

    我正在使用 nginx 设置 phpMyAdmin 我可以访问 phpMyAdminhttp localhost phpmyadmin http localhost phpmyadmin 但是 当我登录时 URL 被重定向到http loc
  • 使用类型映射选项的 PHP SoapClient 示例

    我在 PHP 的 SoapClient 中的命名空间使用方面遇到了一个小问题 从文档中我相信构造函数的类型映射选项将解决我的问题 http php net manual en soapclient soapclient php http p
  • 删除删除线的 unicode 文本?

    我偶尔会收到用户的输入 他们正在使用那些烦人的 stikethrough 文本生成器 这破坏了我的代码 我尝试过在这里找到的一些代码 string preg replace x00 x1F x80 xFF string 它有效 但我需要它只
  • Symfony2 - Doctrine - 更新后没有更改集

    因此 当实体的某个值发生更改时 我会发送电子邮件 我只想在更新后发送电子邮件 以防更新因任何原因失败 所以在更新前我可以这样做 public function preUpdate LifecycleEventArgs args if arg
  • 更改 MySQL 中的列名称 [重复]

    这个问题在这里已经有答案了 搜索后我不知道我需要在 ALTER TABLE 中做什么genres更改列id to genre id有任何想法吗 alter table genres change id genre id int 10 aut
  • (mysql, php) 如何在插入数据之前获取auto_increment字段值?

    我正在将图像文件上传到存储服务器 在上传之前 我应该编写文件名 其中包含自动增量值 例如 12345 filename jpg 在插入数据库之前如何获取自动增量值 我只看到一种解决方案 插入空行 获取其自增值 删除这一行 使用 p 1 中的
  • 一个模型中的多个表 - Laravel

    我的索引页使用数据库中的 3 个表 索引滑块 索引特征 页脚框 我使用一个控制器 IndexController php 并像这样调用三个模型 public function index return View make index gt
  • 如何在MySql中将bool转换为int

    我是 MySql 的新手 所以我不知道很多东西 比如数据类型的转换 如何在 MySql 中将 bool 转换为 int 还有如何在 MySql 中将十进制转换为 Int 将布尔值类型转换为整数 SELECT CAST 1 1 AS SIGN
  • GoLang - 坚持使用 ISO-8859-1 字符集

    我正在开发一个项目 我们需要将信息保存在具有 ISO 8859 1 表的旧数据库中 因此 在向数据库写入内容之前 我需要将其从 UTF 8 转换为 ISO 8859 1 每次从数据库检索它时 我都需要将其转换回 UTF 8 我试图使用图书馆
  • password_verify 哈希值与密码不匹配

    我使用下面的代码生成了密码哈希 hash password hash test PASSWORD BCRYPT 然后我使用 255 个字符将其存储在数据库中 然后我尝试使用比较器来测试登录 但失败了 它只允许我使用我之前刚刚生成的几行哈希登
  • 寻求有关标记视频系统上的“相关视频”查询的建议

    好吧 我运行一个小型视频网站 在实际的视频页面上有一条与大多数视频页面 例如 YouTube 类似的 相关视频 目前我所做的就是随机获取其标签之一并查找其他视频相同的标签 毫不奇怪 这不是一个好方法 因为有些标签非常模糊 有些视频被错误标记

随机推荐

  • Google Drive API 文件更新新的可能错误

    我有一个在 Android 上运行的应用程序 并使用 Drive SDK java API 将 XML 格式的内部数据库副本发送到链接的 Google Drive 帐户中 要更新文件 请执行以下操作 首先 一个文件 obj 从给定的已知文件
  • PHP 函数作为参数默认值

    以下面的函数为例 private function connect method target this gt config gt db try if this gt pointer fopen target method throw ne
  • 使用 Python 3 打印时出现语法错误[重复]

    这个问题在这里已经有答案了 为什么在 Python 3 中打印字符串时会收到语法错误 gt gt gt print hello World File
  • 将指数表示法数字转换为字符串 - 解释

    I have DataFrame from 这个问题 temp u Total Price test num 0 71 7 2 04256e 14 1 39 5 2 04254e 14 2 82 2 2 04188e 14 3 42 9 2
  • 使用 SqlGeographyBuilder 时出现“指定的输入不代表有效的地理实例”异常

    我编写了一个小应用程序 它从一系列 KML 文件中读取 然后将它们转换为Microsoft SqlServer Types SqlGeography使用以下代码输入 private SqlGeography CreateGeographyF
  • CouchDB IP 地址和端口

    当我启动 couchDB 时 它正在运行http 127 0 0 1 5984 我有另一个程序需要在同一端口上运行 所以我想将 couchDB 更改为其他程序 有任何想法吗 在您的中指定端口local ini config httpd po
  • Laravel + Nuxt + Nginx:WebSocket 在连接建立之前关闭

    通用方案和项目配置文件 该项目由两部分组成 服务器部分 Laravel api 客户部分 NuxtJs 客户端 已为测试准备了最低项目配置 Laravel Websockets 软件包已安装 超越代码 laravel websockets
  • 对使用 exams2moodle() 创建的多项选择题和完形填空题进行评分

    我在用exams2moodle 从 R exams 在 Moodle 中创建多项选择题和完形填空题 在准备考试之前 我想确定 Moodle 如何计算成绩 在我看来 在多项选择题中 评估策略的默认设置是partial TRUE rule fa
  • ERROR:Xst:827 = 信号计数无法合成,同步描述错误

    我正在尝试模拟电梯 结果出现错误 ERROR Xst 827 Signal count cannot be synthesized bad synchronous description 我正在关注此来源的代码 https www yout
  • Wildfly 8 Final 上的 JSF 1.2 -weld-core-jsf 仍然引用 JSF 2.2 API

    我目前正在将 JSF 1 2 应用程序迁移到 Wildfly 8 Final 但遇到了困难 首先 我读过很多有关相关问题的帖子 例如https community jboss org message 845006 or 将 JSF 1 2
  • 计算ng重复Angularjs中的值的总和

    我是 Angularjs 的新手 我正在使用 ng repeat 显示项目列表 如何计算它的总和 有没有简单的方法可以使用表达式在html中计算它 name numberofyears amount interest xxx 2 4000
  • int8_t 和 uint8_t 是 char 类型吗?

    给定这个 C 11 程序 我应该看到数字还是字母 还是不抱期望 include
  • Selenium 找不到类型为 number 的字段

    我在让 Cucumber 使用 HTML5 查找字段时遇到问题type number 我不太喜欢它们在浏览器中的显示方式 但我有一些字段需要移动设备上的数字键盘 这似乎是最简单的获取方式 我正在使用 SimpleForm 来构建表单 当我设
  • 设置Android系统音量

    我正在编写一个处理以下内容的应用程序 静音 使手机音量静音 低 使手机音量比静音时高 1 个百分点 中 使手机音量中等 高 将手机音量调至最大 电话音量包括铃声 视频 音频 游戏音量等 我知道如何通过以下方式实现静音模式AudioManag
  • numpy.all 轴参数行为不当?

    我有一个以下数组 a np array 0 5 0 5 0 9 0 9 gt gt gt a shape Out 72 2 4 gt gt gt np all a axis 0 Out 69 array False True False T
  • 将多列中的值乘以一列中的值

    我有以下数据 ID lt c CB1 CB2 CB3 size lt c 10 40 4 Year 1 lt c 10 6 15 Year 2 lt c 12 7 20 Year 3 lt c 14 8 25 data lt data fr
  • 使用 Core Motion 从加速度计数据获取位移

    我正在开发一个增强现实应用程序 目前 想要在表面上显示一个简单的立方体 并且能够在空间中移动 旋转和位移 以从所有不同的角度查看立方体 校准相机的问题在这里不适用 因为我要求用户将 iPhone 放置在他想要放置立方体的表面上 然后按下按钮
  • SIGKILL 信号处理程序

    我需要在收到任何终止命令 如 SIGTERM 和 SIGKILL 时写入日志文件 我可以注册 SIGTERM 但如何处理 SIGKILL 信号 你不能 至少不能杀死进程 你什么can要做的就是安排父进程监视子进程的死亡 并采取相应的行动 任
  • Firebase 绑定未反映在角度视图中

    我从 Firebase 中的每个对象 picUrl 图片的 url 中提取一个值 并将其存储在作用域数组变量 scope bricks 中 如何使 scope bricks 每次使用新对象更新 Firebase 时更新 从而更新新的 pic
  • 透视 mysql 结果集并创建 html 表/矩阵

    我整晚都把头撞在墙上 但还没有解决方案 假设我有这样的 Mysql 表结构 ID name value year 1 Tom 15 2018 2 Tom 4 2019 3 Tom 6 2020 4 Kate 18 2018 5 Kate 2