我的数据库中有这个:
(`id`,`cid`,`subheading`,`name`,`percentage`)
VALUES
(1, 43, 'Big Bang / Evolution Theory', 'Jackie', '9.7'),
(2, 43, 'Big Bang / Evolution Theory', 'Beth', '2.0'),
(3, 43, 'Creation / Creation Theory', 'Jackie', '1.5'),
(4, 43, 'Creation / Creation Theory', 'Beth', '8.2'),
我想使用 php mysql 显示一个 html 表,以在左侧输出名称,该名称可能会增长到 100 或更多,而顶部则是副标题,可能会增长到 2 以上,但在这个阶段是 2。
cid 是唯一标识符,因为会有更多表组,但这一个都与 cid = 43 相关。
我已经提供了我想要的屏幕截图。
以下是一些让我困惑的事情。
对于我尝试过的所有查询,无论有多少种变化,我似乎都无法理解循环的逻辑。
<table class="table">
<tbody>
<tr>
<th scope="col">Name</th>
<?php SELECT subheading FROM ... WHERE cid=43 GROUP BY subheading
foreach (headings as subheading) { ?>
<th scope="col">echo subheading/th>
<?php } ?>
</tr>
<tr>
<?php SELECT name FROM ... WHERE cid=43
foreach (names as name) { ?>
<th scope="row">echo name</th>
<?php } ?>
<?php SELECT percentage FROM ... WHERE cid=43
foreach (percentages as percentage) { ?>
<td>echo percentage</td>
<?php } ?>
</tr>
</tbody>
</table>
是否有某种方法可以创建一个查询来管理这一切?不过,我不允许更改表数据的结构。
最佳答案
理想情况下,我会更改表结构,但正如您所说,您不能这样做。每个名称对于每个副标题都有一个值吗?我会假设是,因为这简化了事情。在这种情况下,我会简单地按字母顺序排列所有内容。
我们需要一个查询来按字母顺序获取标题:
SELECT DISTINCT subheading FROM ... WHERE cid=43 ORDER BY subheading
检索这些内容并循环遍历它们以打印标题。
接下来,您需要第二个查询来检索显示数据:
SELECT * FROM ... WHERE cid=43 ORDER BY name, subheading
然后您可以循环这些结果并构建表格。结果将首先按名称排序,因此通过一些简单的变量检查,您可以确定名称何时更改(这意味着您需要开始下一行)。在单个名称中,结果按子标题按字母顺序排序,这样您就可以简单地按顺序显示百分比(同样,这假设名称包含每个子标题的数据)。
如果您需要对所有 cid 值执行此操作,您可以将整个过程包装在一个遍历 cid 值的 for 循环中。
关于php - 使用 php mysql 的带有顶部和左侧标题的 HTML 表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27083714/