I have a while loop getting info from a MySQL db, outputting info via php. My code is like this:
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";
}
The cLongName can have multiple entries in the database, so it’s outputting data in this form:
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
I’d like to have the data in this format:
lnID | lnLine | lnTitle | cLongName
---------------------------------------------------------------------------------------
lnID1 | lnLine1 | lnTitle1 | cLongname1, cLongname2, cLongname3
lnID2 | lnLine2 | lnTitle2 | cLongname1, cLongname2, cLongname3, cLongname4, cLongname5
I’ve tried bunging in a foreach loop in my while loop but have got nowhere with it. Any ideas or help would be appreciated.
— EDIT —
My MySQL query is as follows:
$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
");
As per ADW’s answer, I tried group_concat on just the cLongName, on all pcdb_colour_name‘s but it’s not giving me any output.
— EDIT 2 —
Changing the SELECT query to this:
$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
");
Allowed me to use $output .= "\t\t" . '<td>' . $row['cLongNames'] . '</td>' . "\r"; on my php, giving me the required output.
You’d probably be better modifying your database query to something like: