2011-06-22 74 views
2

我有一個while循環從MySQL數據庫獲取信息,通過php輸出信息。我的代碼是這樣的:更改while循環的輸出樣式

while($row = mysql_fetch_array($result)) { 
    $output .= '<tr>' . "\r"; 
    $output .= '<td>' . $row['lnID'] . '</td>' . "\r"; 
    $output .= '<td>' . $row['lnLine'] . '</td>' . "\r"; 
    $output .= '<td>' . $row['lnTitle'] . '</td>' . "\r"; 
    $output .= '<td>' . $row['cLongName'] . '</td>' . "\r"; 
    $output .= '</tr>' . "\r"; 
} 

cLongName可以在數據庫中的多個條目,所以它在這個形式輸出數據:

lnID | lnLine | lnTitle | cLongName 
--------------------------------------- 
lnID1 | lnLine1 | lnTitle1 | cLongname1 
lnID1 | lnLine1 | lnTitle1 | cLongname2 
lnID1 | lnLine1 | lnTitle1 | cLongname3 
lnID2 | lnLine2 | lnTitle2 | cLongname1 
lnID2 | lnLine2 | lnTitle2 | cLongname2 
lnID2 | lnLine2 | lnTitle2 | cLongname3 
lnID2 | lnLine2 | lnTitle2 | cLongname4 
lnID2 | lnLine2 | lnTitle2 | cLongname5 

我想有這種格式的數據:

lnID | lnLine | lnTitle | cLongName 
--------------------------------------------------------------------------------------- 
lnID1 | lnLine1 | lnTitle1 | cLongname1, cLongname2, cLongname3 
lnID2 | lnLine2 | lnTitle2 | cLongname1, cLongname2, cLongname3, cLongname4, cLongname5 

我試過在我的while循環中的foreach循環中使用套接字,但是它已經無處可用。任何想法或幫助將不勝感激。

- 編輯 -

我的MySQL查詢如下:

$result = mysql_query(" 
    SELECT 
    pcdb_line.lnID, pcdb_line.lnLine, pcdb_line.lnTitle, 
    pcdb_colourways.cwLine, pcdb_colourways.cwColID1, 
    pcdb_colour_name.cID, pcdb_colour_name.cLongName, pcdb_colour_name.cHex 
    FROM pcdb_line 
    GROUP BY pcdb_line.lnID 
    LEFT JOIN pcdb_colourways 
    ON (pcdb_line.lnID = pcdb_colourways.cwLine) 
    LEFT JOIN pcdb_colour_name 
    ON (pcdb_colour_name.cID = pcdb_colourways.cwColID1) 
    LIMIT 50 
"); 

按ADW的答案,我想group_concat上只是cLongName,所有pcdb_colour_name的,但它不是給我任何輸出。

- EDIT 2 -

改變SELECT查詢到這一點:

$result = mysql_query(" 
    SELECT 
     pcdb_line.lnID, pcdb_line.lnLine, pcdb_line.lnTitle, 
     pcdb_colourways.cwLine, pcdb_colourways.cwColID1, 
     pcdb_colour_name.cID, group_concat(pcdb_colour_name.cLongName) AS cLongNames, pcdb_colour_name.cHex 
    FROM pcdb_line 
    LEFT JOIN pcdb_colourways 
    ON (pcdb_line.lnID = pcdb_colourways.cwLine) 
    LEFT JOIN pcdb_colour_name 
    ON (pcdb_colour_name.cID = pcdb_colourways.cwColID1) 
    GROUP BY pcdb_line.lnID 
    LIMIT 50 
    "); 

讓我在我的PHP中使用$output .= "\t\t" . '<td>' . $row['cLongNames'] . '</td>' . "\r";,給我所需的輸出。

回答

6

你可能會更好,修改您的數據庫查詢喜歡的東西:

select lnID,lnLine,lnTitle,group_concat(cLongName) from table group by lnID,lnLine,lnTitle; 
+1

+1真棒,從來不知道'group_concat'存在。肯定會使用它。 – Tomgrohl

+1

是否最好將'group_concat(cLongName)作爲cLongNames',然後才能訪問? – Tomgrohl

+0

它對我來說看起來是個很好的答案,我對於如何格式化「select」查詢有點失落。我已經把它放在Q中,所以如果你能看一看並讓我知道,那將是非常棒的。如果您需要更多信息,請告訴我。 –

2

作爲一個額外的音符@ ADW的答案,如果你與整數工作,你可能需要鍵入第一丟掉。

select lnID,lnLine,lnTitle,group_concat(CAST(cLongName as CHAR)) as cLongNames from table group by lnID,lnLine,lnTitle; 

那麼你可以使用它作爲:

$result = mysql_query(" 
    SELECT 
    pcdb_line.lnID, pcdb_line.lnLine, pcdb_line.lnTitle, 
    pcdb_colourways.cwLine, pcdb_colourways.cwColID1, 
    pcdb_colour_name.cID, group_concat(pcdb_colour_name.cLongName) as cLongNames, pcdb_colour_name.cHex 
    FROM pcdb_line 
    GROUP BY pcdb_line.lnID 
    LEFT JOIN pcdb_colourways 
    ON (pcdb_line.lnID = pcdb_colourways.cwLine) 
    LEFT JOIN pcdb_colour_name 
    ON (pcdb_colour_name.cID = pcdb_colourways.cwColID1) 
    LIMIT 50 
"); 

那麼你會訪問它$row['cLongNames']

+0

平心而論,我認爲@ADW應該得到正確的答案,我只是在擴展它。 – Tomgrohl

+0

我斬斷了幾次 - 改進了它,當然,但我會去做大多數(和你的)決定。很高尚! :-) –

+0

呵呵,不用擔心。那麼我從你的答案中學到了一些東西,所以它很好。 – Tomgrohl