[英]Grouping the same rows for a column in PHP/MySQL
假設我有一個如下所示的表結構
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:我要分組的東西太多,簡單的解決方法不適合。
對於您的示例,我將這樣做:
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是數據庫列的有效值,並且您不希望在此基礎上加倍。
在查詢中嘗試使用DISTINCT location
如果要為表行使用具有不同顏色的表,建議您使用前端框架Bootstrap。 在此處閱讀有關此內容的更多信息。
對於使用行引導的解決方案,使用交替行顏色(“條紋行”)的另一個類似問題,請參見在引導3中交替行顏色-無表
注意:第一個鏈接與Bootsrap v.4相關,第二個鏈接與Bootstrap v.3相關。 兩者都應使您了解帶區的行功能,而與Bootstrap版本無關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.