php mysql while - loop while条件相同

时间:2014-05-17 02:14:23

标签: php mysql while-loop

我有一个具有这种结构的数据库:

name|color

paul|blue
mary|red
paul|green
joe |yellow
paul|purple
mary|orange
paul|white
etc |etc

我在这里想要实现的是列出与名称相关联的颜色,如下所示:

paul=blue,green,purple,white
mary=red,orange
joe=yellow

我正在检查一些例子,发现了这个:

$query="SELECT * FROM  mytable order by name";
$result = mysql_query($query) or die(mysql_error());

while($row = mysql_fetch_array($result)){
    echo $row['name']. " - ". $row['color'];
    echo "<br />";
}

说实话,我不知道如何从这个到我想要实现的目标。如何创建一个条件,列出与一个名称关联的所有颜色,然后跳转到下一个,依此类推?

3 个答案:

答案 0 :(得分:5)

您需要使用GROUP_CONCAT。尝试这样的事情:

SELECT
  name,
  GROUP_CONCAT(color) AS color
FROM mytable
GROUP BY name

See this fiddle - 已更新

如果您需要考虑重复项,请使用GROUP_CONCAT(DISTINCT color)。您还可以添加自定义SEPARATOR,但如果您将其保留,则默认值为,。因此,在您的情况下,您不需要指定。另外,正如上面链接的文档中所示,如果需要,您可以按照您认为合适的方式对颜色进行排序 - 但请注意,默认顺序是ASC,因此您也不需要指定颜色,除非你想改变它。

答案 1 :(得分:3)

您可以使用SQL查询完成所有操作:

SELECT name, GROUP_CONCAT(DISTINCT color ORDER BY color DESC SEPARATOR ',')
FROM mytable
GROUP BY name;

答案 2 :(得分:-1)

谢谢你指点我正确的方向。我设法收集更多信息并使其成功:

$query="SELECT name, GROUP_CONCAT(color) FROM mytable GROUP BY name";
$result = mysql_query($query) or die(mysql_error());

while($row=mysql_fetch_array($result))  
{  
echo "<tr>";  
echo "<td>" . $row['name'] . "</td>";  
echo "<td>" . $row['GROUP_CONCAT(color)'] . "</td>";  
echo "</tr>";  
} 

再次感谢你:)