php - 使用 MySQL 数据填充 HTML 表的列和行
问题描述
不知道如何很好地表达这个问题,但希望有人能提供帮助......我正在尝试从 MySQL 数据库中选择数据并使用 PHP 将其输出到 HTML 表,其中来自查询的数据形成列标题和行。我的“预算”表中的数据如下所示:
我想在行中输出客户,在列中输出周,并将数量的总和作为数据输出。到目前为止,我有:
<? $q1 = mysqli_query($conn, "SELECT customer, week, sum(qty) AS qty FROM budget GROUP BY week, customer"); ?>
<table>
<thead>
<tr>
<th>Customer</th>
<th>Week</th>
<th>Qty</th>
</tr>
</thead>
<tbody>
<? while($row1 = mysqli_fetch_assoc($q1)){ ?>
<tr>
<td><?= $row1['customer']; ?></td>
<td><?= $row1['week']; ?></td>
<td><?= $row1['qty']; ?></td>
</tr>
<? } ?>
</tbody>
</table>
这会产生一个类似于原始 MySQL 表格式的表,但我想要实现的是:
周选择将是动态的,因此我希望在列中显示 4 或 36 周,具体取决于它们在表单中的选择。
解决方案
与mysqli_fetch_row
. 每行都是一个可以通过索引访问的数组。看起来像:Array ( [0] => A [1] => 1 [2] => 52 ... )
创建一个新的二维数组,看起来像
$arr["A"] = [
1 => ...
2 => ...
]
例子
PHP
<?php
// $conn = ...
$q1 = mysqli_query($conn, "SELECT customer, week, sum(qty) AS qty FROM budget GROUP BY week, customer");
$res1 = [];
while($row = mysqli_fetch_row($q1))
{
array_push($res1, $row);
}
$title = "Customer";
$max = $res1[count($res1) - 1][1];
$res2 = [];
// Index for "title" ("A", "B", "C", ...)
$i = 0;
foreach ($res1 as $row) {
$res2[$row[$i]][$row[1]] = $row[2];
}
?>
HTML
<table>
<thead>
<tr>
<td><?= $title ?></td>
<?php for ($i = 1; $i <= $max; $i++): ?>
<td><?= $i ?></td>
<?php endfor; ?>
</tr>
</thead>
<tbody>
<?php foreach ($res2 as $key => $values): ?>
<tr>
<td><?= $key ?></td>
<?php foreach ($values as $value): ?>
<td><?= $value ?></td>
<?php endforeach; ?>
</tr>
<?php endforeach; ?>
</tbody>
</table>
推荐阅读
- html - 如何使用表格在行上添加边框?
- ruby-on-rails - ActiveRecord 对同一用户在过去一小时内创建的帖子进行分组
- google-drive-api - Ansible - 从 Google Drive 下载文件
- angularjs - Angularjs 使用 FileReader 获取文件 url
- iis - IIS URL 重写 - 将查询字符串键和值更改为路由
- python - 停止 TensorFlow 数据集“from_generator”的正确方法?
- typescript - 你如何对 Observable 进行排序
- 在 Angular 6 和 rxjs 6 中?
- ios - Lyft API for iOS 中的语法错误 - 无法编译?
- php - php文件上传脚本不会上传jpeg?
- sql-server-2008 - 如何一次只允许一个用户在 SQL Server 表中执行插入触发器?