假设我有一个如下所示的表结构
location|name
-------------
NY|john
London|neil
NY|clair
Run Code Online (Sandbox Code Playgroud)
我使用检索数据
SELECT * FROM table
Run Code Online (Sandbox Code Playgroud)
的HTML视图文件如下:
<table>
<tr><td>location</td><td>name</td>
<?php foreach($rows as $row):>
<tr><td><?=$row->location></td><td><?=$row->name></td>
<?php endforeach;>
</table>
Run Code Online (Sandbox Code Playgroud)
正如您所猜测的,它会多次输出一行的每一列.
我真正想要的是,将它们列为,
NY
john
clair
London
neil
Run Code Online (Sandbox Code Playgroud)
如果我可以在纽约和伦敦之间使用交替的颜色也会很棒.
ps:我有太多的东西要分组,简单的解决方法是不合适的.
举个例子,我会这样做:
SELECT * FROM table ORDER BY location
Run Code Online (Sandbox Code Playgroud)
现在,这些地点将成群结队.您可以添加以逗号分隔的更多列.
接下来,对于PHP:
<?php $lastLocation = 'havenotseenityet'; ?>
<table>
<tr><td>location</td><td>name</td>
<?php foreach($rows as $row):>
<tr>
<?php if ($lastLocation != $row->location) {
$lastLocation = $row->location;
?>
<td><?=$row->location></td><td><?=$row->name></td>
<?php
} else {
?>
<td></td><td><?=$row->name></td>
} ?>
<?php endforeach;>
</table>
Run Code Online (Sandbox Code Playgroud)
我们在这里做的是获取行,以便相同的位置彼此相邻(并且排序 - 彼此相邻是副作用).然后我们跟踪我们看到的最后一个位置,当我们看到一个新位置时,我们会显示位置,否则我们会隐藏它直到我们看到一个新位置.这可以扩展到任意数量的项目,但要记住,如果你排序state, city,那么当你看到不同的状态时,你必须让城市也看不到.
最后,请注意我没有以$ lastLocation = null开头.这是因为null是DB列的有效值,并且您不想绊倒它.