簡體   English   中英

將同一行分組為PHP / MySQL中的列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM