假设我有一个如下所示的表结构
location|name
-------------
NY|john
London|neil
NY|clair
我使用
检索数据SELECT * FROM table
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>
正如您所猜测的那样,它会多次输出一行的每一列。
我真正想要的是,将它们列为,
NY
john
clair
London
neil
如果我可以在纽约和伦敦之间使用交替的颜色,那也很棒。
ps:我有太多东西需要分组,简单的解决方法是不合适的。
答案 0 :(得分:5)
对于你的例子,我会这样做:
SELECT * FROM table ORDER BY location
现在,这些地点将成群组。您可以添加更多这些以逗号分隔的列。
接下来,对于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>
我们在这里做的是获取行,使相同的位置彼此相邻(并且排序 - 彼此相邻是副作用)。然后我们跟踪我们看到的最后一个位置,当我们看到一个新位置时,我们会显示位置,否则我们会隐藏它直到我们看到一个新位置。这可以扩展到任意数量的项目,但请记住,如果按state, city
排序,那么当您看到不同的状态时,您必须让城市看不到。
最后,请注意我没有以$ lastLocation = null开头。这是因为null是DB列的有效值,并且您不想绊倒它。
答案 1 :(得分:1)
尝试使用DISTINCT location
答案 2 :(得分:0)
如果你想使用表行交替颜色的表,我建议你使用前端框架Bootstrap。详细了解此here。
对于交替行颜色的另一个类似问题(&#34;条纹行&#34;),使用Bootstrap的解决方案,请参阅Alternating Row Colors in Bootstrap 3 - No Table
注意:第一个链接与Bootsrap v.4有关,第二个链接与Bootstrap v.3有关。两者都应该让您了解条带行功能,独立于Bootstrap版本。