2011-06-22 52 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