我在数据库中有这个:
(`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。 / p>
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>
有没有办法创建一个查询来管理这一切?我不允许改变表数据的结构。
答案 0 :(得分:1)
理想情况下,我会更改表结构,但正如您所说,您不能这样做。每个名称每个子标题都有一个值吗?我会假设是,因为这简化了事情。在这种情况下,我只是按字母顺序排序所有内容。
我们需要一个查询才能按字母顺序排列标题:
SELECT DISTINCT subheading FROM ... WHERE cid=43 ORDER BY subheading
检索它们并循环遍历它们以打印标题。
接下来,您需要第二个查询来检索显示数据:
SELECT * FROM ... WHERE cid=43 ORDER BY name, subheading
然后,您可以遍历这些结果并构建表。结果将按名称排序,因此通过一些简单的变量检查,您可以确定名称何时更改(意味着您需要开始下一行)。在单个名称中,结果按字母顺序由子标题排序,因此您只需按顺序显示百分比(同样,这假定名称包含每个子标题的数据)。
如果你需要为所有cid值执行此操作,可以将整个事物包装在一个贯穿cid值的for循环中。