2011-06-22 4 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ループを実行しようとしましたが、どこにもありません。任意のアイデアや助けをいただければ幸いです。

- EDIT -

次のように私のMySQLのクエリは次のとおりです。ADWの答えを1として

$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 
"); 

、私はすべてのpcdb_colour_name年代に、ちょうどcLongNamegroup_concatを試みたが、それは私を与えていません任意の出力。

- EDIT 2 -

これにSELECTクエリを変更する:私は私に必要な出力を与え、私のPHPに$output .= "\t\t" . '<td>' . $row['cLongNames'] . '</td>' . "\r";を使用することはでき

$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 
    "); 

答えて

6

あなたは、おそらくのようなものに、データベースのクエリを変更する方が良いと思います:あなたは、あなたが最初にそれらをキャスト入力する必要があり、整数を扱う場合には、ADWの答えを@に

余分な注意点としては
select lnID,lnLine,lnTitle,group_concat(cLongName) from table group by lnID,lnLine,lnTitle; 
+1

+1恐ろしいことに、 'group_concat'が存在することは決してありませんでした。間違いなくそれを使うつもりです。 – Tomgrohl

+1

'group_concat(cLongName)as cLongNames'を実行するのが最善でしょうか?それでアクセスできますか? – Tomgrohl

+0

私には良い答えのようですが、私は 'select'クエリをどのようにフォーマットする必要があるのか​​分からなくなってしまいました。私はそれをQに入れました。あなたが見て私に知らせることができれば、それはすばらしいでしょう。詳細が必要な場合は、私に知らせてください。 –

2

そして、あなたはとしてそれにアクセスする

$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 
"); 

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

その後、としてそれを使用します

+0

私は@ADWが正解を得なければならないと私は考えています。 – Tomgrohl

+0

私は細かく切って数回変えました。あなたはそれを洗練しましたが、大部分(そしてあなたの)決定に行くでしょう。非常に高貴! :-) –

+0

Hehe、心配しないでください。私はあなたの答えから何かを学んだので、そのすべてが良い。 – Tomgrohl

関連する問題