使用php mysql的顶部和左侧标题的HTML表格

时间:2014-11-22 23:24:59

标签: php html mysql

我在数据库中有这个:

(`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相关。

我提供了一个屏幕抓取我想要的方式。

enter image description here

以下是让我感到困惑的一些事情。

我已经尝试了所有的查询,无论有多少变化,我似乎无法理解循环这一过程的逻辑。

<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>

有没有办法创建一个查询来管理这一切?我不允许改变表数据的结构。

1 个答案:

答案 0 :(得分:1)

理想情况下,我会更改表结构,但正如您所说,您不能这样做。每个名称每个子标题都有一个值吗?我会假设是,因为这简化了事情。在这种情况下,我只是按字母顺序排序所有内容。

我们需要一个查询才能按字母顺序排列标题:

SELECT DISTINCT subheading FROM ... WHERE cid=43 ORDER BY subheading

检索它们并循环遍历它们以打印标题。

接下来,您需要第二个查询来检索显示数据:

SELECT * FROM ... WHERE cid=43 ORDER BY name, subheading

然后,您可以遍历这些结果并构建表。结果将按名称排序,因此通过一些简单的变量检查,您可以确定名称何时更改(意味着您需要开始下一行)。在单个名称中,结果按字母顺序由子标题排序,因此您只需按顺序显示百分比(同样,这假定名称包含每个子标题的数据)。

如果你需要为所有cid值执行此操作,可以将整个事物包装在一个贯穿cid值的for循环中。