2009-11-19 13 views
1

假設你有一個表是這樣的:PHP - 獲得一個大陣的有限塊從MySQL表

ID Cat1 Cat2 
1 a  red 
2 b  red 
3 c  blue 
4 d  blue 
5 e  blue 
6 f  green 
etc etc etc 

的目標是顯示ID和CAT1(唯一對),分成不同的小組根據Cat2。簡單的解決方法是爲每個Cat2運行一個單獨的MySQL查詢,但有許多不同的Cat2值,這會產生更多數量級的查詢,以向查看者顯示一頁,而不僅僅是在一個查詢中獲取大量數據,以及用PHP分割它。

我已完成格式化。但我有一個很難用
$sql = "SELECT ID,Cat1,Cat2 FROM MyTable ORDER BY Cat2,ID"

用簡單的英語(顯然不是真正的代碼)後,搞清楚如何基於從$value = mysql_fetch_row($result)採取的陣列$value[2]在第三列的值來限制我的行輸出它會是什麼樣子:

$result = mysql_query($sql); 

IF ($value[2] from $value = mysql_fetch_row($result) = "red") 
    { 
     echo "Red Group"; 
     WHILE() 
    { 
     echo $value[0] and $value[1] for all the rows where Cat2 = red 
    } 
    } 

IF ($value[2] from $value = mysql_fetch_row($result) = "blue") 
    { 
     echo "Blue Group"; 
     WHILE() 
    { 
     echo $value[0] and $value[1] for all the rows where Cat2 = blue 
    } 
    } 
etc 

這一切都有道理嗎?你如何從$result陣列中獲取這些數據組?

顯然很不全部意義! :-) 這裏的期望輸出的一個例子:

RED GROUP 
1 a 
2 b 

BLUE GROUP 
3 c 
4 d 
5 e 

GREEN GROUP 
6 f 

etc 

謝謝!

+0

@Andrew:我感到有點抱歉,但我不明白這個問題,你可能會像一個簡短的例子那樣顯示你期望的結果。 – RageZ 2009-11-19 08:26:10

+0

我已經添加了一個輸出示例! – Drew 2009-11-19 08:45:12

回答

3

我不知道如果我理解正確的話,但這樣做解決問題了嗎?

基本的想法是,你循環遍歷所有行並始終保存Cat2的最後一個值。只要您檢測到Cat2發生變化,您就可以爲新的Cat2插入「標頭」。由於您首先根據Cat2對結果進行排序,這將創建您想要的輸出。

$query = "SELECT ID,Cat1,Cat2 FROM MyTable ORDER BY Cat2,ID" 
$result = mysql_query($query); 
$last = ""; 
while ($line = mysql_fetch_row($result)) { 
    if ($line[2] != $last) { 
    echo $line[2] . ' Group'; 
    $last = $line[2]; 
    } 
    echo $line[0] . ' ' . $line[1]; 
} 
+0

請看我剛剛發佈的輸出示例。 – Drew 2009-11-19 08:47:06

+0

您是否嘗試過我的解決方案?它顯示你想要的輸出...... – michaelk 2009-11-19 08:48:41

+0

我已經爲我的解決方案添加了一個簡短的解釋。希望它有幫助;) – michaelk 2009-11-19 08:52:16

0

你想要做的就是限制你的數據庫將恢復使用SQL的 WHERE語句行什麼。 得多:

$sql = "SELECT ID,Cat1,Cat2 FROM MyTable ORDER BY Cat2,ID"; 
$result = mysql_query($sql, $link) or die('Error'); 

$last_group = ''; 

echo '<table>'; 

while (list($id, $cat1, $cat2) = mysql_fetch_row($result)) 
{ 
    if ($cat2 != $last_group) 
    { 
     echo '<tr><td colspan="2">'.$cat2.' group</td></tr>'; 
    } 

    echo '<tr><td>'.$id.'</td><td>'.$cat1.'</td></tr>'; 

    $last_group = $cat2; 
} 

echo '</table>'; 
+0

我現在沒有任何地方可以測試它,但是您的WHILE語句看起來像我正在尋找的解決方案。我已經知道的$ sql,這不是一個問題。謝謝,我會盡可能地報告,並給予您檢查是否符合我的需求。如果不是,我想我必須提供更多信息。 – Drew 2009-11-19 08:39:13

+0

那麼,爲什麼你不想添加'WHERE'語句到你的查詢?或者你剛纔弄明白了嗎? – Franz 2009-11-19 08:43:11

+0

我沒有添加WHERE語句,因爲表格只有這3列,我需要顯示錶格的每一行。沒有必要使用WHERE,因爲我抓住了一切。順便說一下,不知道如何從你的建議得到我想要的輸出。請參閱我剛剛添加的所需輸出示例。 – Drew 2009-11-19 08:46:20

0

我會說,可能會做它

它會給通過Cat2分組後,它只是雙循環到陣列以獲得所需的輸出數組。