MySQL(或 PHP?)按字段数据分组结果

Posted

技术标签:

【中文标题】MySQL(或 PHP?)按字段数据分组结果【英文标题】:MySQL (or PHP?) group results by field data 【发布时间】:2011-04-08 00:37:43 【问题描述】:

我有一个类似于此的 mysql 数据库:

ID    Group   Name

1       1       John
2       1       Andrea
3       1       Jack
4       2       Mike
5       2       Kurt
6       3       Alice

我需要在一个 html 表格中对结果进行排序,如下所示:

Group       Name
-----------------------
  1         John
            Andrea
            Jack
-----------------------
  2         Mike
            Kurt
-----------------------
  3         Alice
-----------------------

我不知道这是否应该使用 SQL 查询(concat_group 或类似的东西)或 php 来完成,有人可以帮我吗?

伙计们,感谢下面的帮助,但我还需要完成类似的事情,比如:

ID    meta_key  meta_value   name

1       group     1          John
2       group     1          Andrea
3       group     1          Jack
4       group     2          Mike
5       group     2          Kurt
6       group     3          Alice

我需要排序/显示与上面的示例相同,如下所示:

group       name
-----------------------
  1         John
            Andrea
            Jack
-----------------------
  2         Mike
            Kurt
-----------------------
  3         Alice
-----------------------

现在我的问题有了新的维度。我的数据库如下所示:

b.ID    b.meta_key  b.meta_value   a.title   

1       group       1                Title 1
2       group       1                Title 2
3       group       1                Title 3
4       group       2                Title 4
5       group       2                Title 5
6       group       3                Title 6
7       coef        6                Title 1
8       coef        4                Title 2
9       coef        12               Title 3
9       coef        2                Title 4
9       coef        3                Title 5
9       coef        7                Title 6

(我正在处理表格)

而我需要达到:

group       title         coef
---------------------------------
  1         Title 1        6 
            Title 2        2
            Title 3        12
--------------------------------
  2         Title 4        2
            Title 5        3
--------------------------------
  3         Title 6        7
--------------------------------

¿这可能吗?

【问题讨论】:

这种事情可以通过 SQL 查询来完成,但这是我在 SQL 中不会经常处理的罕见的演示内容 【参考方案1】:

这将是我的解决方案,尽管一点也不优雅

<?php
$dbc = new MySQLI(DBHOST,DBUSER,DBPASS,DB);
$result = $dbc->query("
SELECT
p.Group as 'group',
GROUP_CONCAT(name) as names
FROM prueba p
GROUP BY p.Group
");
?>
<table>
<tr>
    <th>Group</th>
    <th>Name</th>
</tr>
<?php while($row = $result->fetch_assoc())
    $names = split(",",$row["names"]);
?>
    <tr>
        <td><?php echo $row["group"] ?> </td>
        <td><?php echo $names[0]; array_shift($names) ?></td>
    </tr>
    <?php foreach( $names as $name) ?>
        <tr>
            <td></td>
            <td><?php echo $name ?></td>
        </tr>
    <?php  ?>
<?php  ?>
</table>

【讨论】:

我已经编辑了问题,再次感谢 Armonage,我的最终查询结果为:SELECT p.meta_key as 'meta_key', p.meta_value as 'meta_value', GROUP_CONCAT(name) as names FROM prueba p WHERE p.meta_key = '_numero' GROUP BY p.meta_value 现在一切正常,再次感谢!【参考方案2】:

试试这个:

// SQL stuff

$group = null;

while($row = mysql_fetch_array($result))

    if($row['group'] != $group)
    
        echo $row['group'];
        $group = $row['group'];
    

    $row['name'];

【讨论】:

+1 这正是我要做的,根本没有分组,但是你错过了设置 $group 变量的 else 块 不,你不需要 else 组,只需将 else 中的内容移动到 if ($group=$row['group']; echo $group;) 中,它就会按预期工作。并且sql查询必须有ORDER BY group 确实,这种类型的分组真的不需要else 语句... 感谢大家的帮助,我对速度感到惊讶。我刚刚尝试了您的代码(YouBook),结果是:1John1Mike1Jose1Pedro2Archie2Peter3Alberto 我需要它是:1John Mike Jose Pedro 2Archie Peter 3 Alberto 我做错了什么?再次感谢! p.d:如果我尝试使用 GROUP BY(数字),它会显示每个数字 1 个结果:1 John 2 Archie 3 Alberto

以上是关于MySQL(或 PHP?)按字段数据分组结果的主要内容,如果未能解决你的问题,请参考以下文章

Jquery 或 PHP 按日期字段分组对象数组

mysql按字段分组并获取每个分组按照某个字段排序的前三条

mysql 按表达式或函数分组多个字段分组排序

Linux——MySQL高阶语句杂而精

Linux——MySQL高阶语句杂而精

在mysql中按2字段分组[重复]