2013-05-15 55 views
-1

我現在有這樣的數據在表格中顯示從MySQL這樣的數據:一種更好的方式使用PHP

id | type 
------------ 
1 | 1 
2 | 1 
3 | 2 
4 | 2 
5 | 3 
6 | 3 
6 | 3 

我需要這樣的顯示數據:

Type 1 
--All type ones go here 
Type 2 
-- All type twos go here 
Type 3 
All type threes go here 

我這樣做的方式它現在是通過使用兩個單獨的SQL語句和循環。

select distinct type as type from table 
while() 
{ 
select type from table where type = type; 
while() 
{ 

} 
} 

有沒有更好的方法來做到這一點,並得到我想要的結果,或者是使用兩個循環的唯一方法?

+0

輸出請出示您的實際預期的結果。 – hims056

+0

如何只做一個查詢'select * from table order by type' –

+0

@ hims056它在那裏。第二件事與藍色背景。 – Norman

回答

3
  1. 更改您的查詢,以便使用ORDER BY type ASC
  2. 循環遍歷結果,建立一個關聯數組,其中鍵是類型,值是ids。

現在您只有一個循環,並且可以通過關聯數組的類型來訪問ids。用鍵循環訪問數組應該是微不足道的,然後顯示該鍵的所有id。

1

使用GROUP_CONCAT()GROUP BY

SELECT 
    `type`, 
    GROUP_CONCAT(`id` SEPARATOR ',') as `ids` 
FROM 
    `table` 
GROUP BY 
    `type` 
ORDER BY 
    `type`; 

在每個循環迭代中,$row['ids']可能是explode() d,如:

<?php 

while($row = $result->fetch_assoc()){ 
    $ids = explode(',', $row['ids']); 

    echo 'Type ', $row['type'], PHP_EOL; 

    if(empty($ids))continue; 

    foreach($ids as $id){ 
     echo $id, ' '; 
    } 

    echo PHP_EOL; 
} 

?> 
1

只需選擇一切,並檢查每當你打一個新的類型。這使您只需使用一個查詢即可在O(n)時間內列出所有內容。

$result = mysql_query('SELECT id, type FROM table ORDER BY type ASC'); 
$type = 0; 
while ($row = mysql_fetch_assoc($result) { 
    if ($type != $row['type']) { 
    // New type found 
    $type = $row['type']; 
    echo "Type " + $row['type'] + "\n"; 
    } 
    echo "-- " + $row['id'] + "\n"; 
} 

這將使你喜歡這個

Type 1 
-- 1 
-- 2 
Type 2 
-- 3 
-- 4 
Type 3 
-- 5 
-- 6 
-- 7 
相關問題