如何将mySQL中具有相同值的行分组到php中?

pea*_*ove 5 php mysql

这是我的mySQL表animals:

    ???????????????????
    ?  animal  ? name ?
    ???????????????????
    ?   dog    ? sam  ?
    ?   cat    ? fred ?
    ?   cat    ? todd ?
    ?  bird    ? alan ?
    ???????????????????
Run Code Online (Sandbox Code Playgroud)

我想在表格中选择所有数据:

            $sql = 'SELECT  *  FROM animals';
            foreach ($pdo->query($sql) as $row) {
                echo '<td>'.$row['animal'].' </td>';
                echo '<td>'.$row['name'].' </td>';
            }
Run Code Online (Sandbox Code Playgroud)

我的结果是:

    ???????????????????
    ?   dog    ? sam  ?
    ?   cat    ? fred ?
    ?   cat    ? todd ?
    ?  bird    ? alan ?
    ???????????????????
Run Code Online (Sandbox Code Playgroud)

但我想只用同一个动物输出一次行,但是所有的名字都在一行中,如下所示:

    ??????????????????????????
    ?   dog    ? sam         ?
    ?   cat    ? fred, todd  ?
    ?  bird    ? alan        ?
    ??????????????????????????
Run Code Online (Sandbox Code Playgroud)

我不知道如何实现这一目标.我试着朝这个方向思考:

SELECT  *  FROM animals GROUP BY animal
Run Code Online (Sandbox Code Playgroud)

但我被卡住了!我很高兴每一个提示!

Ale*_*lex 7

SELECT  
  a.animal
  GROUP_CONCAT(a.name) names
FROM animals a
GROUP BY a.animal
Run Code Online (Sandbox Code Playgroud)

注意检查我更改的查询并将您的php片段更改$row['name']$row['names']

更新将您的循环更改为:

        foreach ($pdo->query($sql) as $row) {
            echo '<tr><td>'.$row['animal'].' </td>';
            echo '<td>'.$row['names'].' </td></tr>';
        }
Run Code Online (Sandbox Code Playgroud)


apo*_*fos 6

MySQL有一个非标准的SQL函数,GROUP_CONCAT专门用于执行此操作.

用于:

SELECT  animal, GROUP_CONCAT(name) as grouped_name  FROM animals GROUP BY animal
Run Code Online (Sandbox Code Playgroud)

在PHP中使用:

 $sql = ' SELECT  animal, GROUP_CONCAT(name) as grouped_name  FROM animals GROUP BY animal';
 foreach ($pdo->query($sql) as $row) {
     echo '<td>'.$row['animal'].' </td>';
     echo '<td>'.$row['grouped_name'].' </td>'; 
 }
Run Code Online (Sandbox Code Playgroud)

请注意具有该组的列是如何重命名/别名的,grouped_name因为该name列不再是该列.您可以grouped_name在sql结果中通过别名引用此列.