2011-07-28 55 views
1

假設我有一個表結構等看出下面分組相同的行中的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:我有太多的事情要分組,簡單的解決方法將不適合。

回答

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列是有效的值,並且您不希望在那裏查詢。

+0

輝煌,謝謝。 –

1

在查詢中嘗試使用DISTINCT location

+0

我不想刪除相同的位置行。我想分組他們。 –

0

如果你想使用一個表,交替的顏色爲錶行,我建議你使用的前端框架的引導。閱讀更多關於here

對於具有交替行顏色(「條紋行」),在使用自舉的溶液另一個類似的問題,請Alternating Row Colors in Bootstrap 3 - No Table

注意:第一連桿涉及Bootsrap V.4,第二涉及自舉第3節。兩者都應該讓您瞭解條帶行功能,獨立於Bootstrap版本。

相關問題