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

MySQL(或PHP?)按字段数据对结果进行分组,php,mysql,group-by,Php,Mysql,Group By,我有一个类似于以下内容的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 J

我有一个类似于以下内容的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
-----------------------
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
-----------------------
我不知道这是否应该用SQL查询(concat_group,或类似的东西)或PHP来完成,有人能帮我一下吗

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

Group       Name
-----------------------
  1         John
            Andrea
            Jack
-----------------------
  2         Mike
            Kurt
-----------------------
  3         Alice
-----------------------
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
-----------------------
我需要排序/显示与上述示例相同的内容,如下所示:

Group       Name
-----------------------
  1         John
            Andrea
            Jack
-----------------------
  2         Mike
            Kurt
-----------------------
  3         Alice
-----------------------
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
(我正在与to tables合作)

我需要实现:

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 stuff

$group = null;

while($row = mysql_fetch_array($result))
{
    if($row['group'] != $group)
    {
        echo $row['group'];
        $group = $row['group'];
    }

    $row['name'];
}
试试这个:

// SQL stuff

$group = null;

while($row = mysql_fetch_array($result))
{
    if($row['group'] != $group)
    {
        echo $row['group'];
        $group = $row['group'];
    }

    $row['name'];
}

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

<?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>

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

<?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>

+1这正是我要做的,根本没有分组,但是您错过了else块来设置
$group
变量。o,您不需要else组,只需将内容从else移动到if(
$group=$row['group'];echo$group;
),然后它就可以按预期工作。sql查询必须有
按组排序
事实上,对于这种类型的分组,您真的不需要
else
语句……谢谢大家的帮助,我对它的快速性感到惊讶。我刚刚尝试了你的代码(YouBook),结果是:1约翰·迈克·约瑟夫·佩德罗2阿尔贝托我需要它:1约翰·迈克·约瑟夫·佩德罗2阿尔贝托·彼得3阿尔贝托我做错了什么?再次感谢!p、 d:如果我尝试使用GROUP BY(数字),它会显示每个数字的一个结果:1 John 2 Archie 3 Alberto+1这正是我要做的,根本没有分组,但是你错过了else块来设置
$GROUP
变量,你不需要else组,只需将内容从else移到if(
$GROUP=$row['GROUP'];echo$GROUP;
),然后它按预期工作。sql查询必须有
按组排序
事实上,对于这种类型的分组,您真的不需要
else
语句……谢谢大家的帮助,我对它的快速性感到惊讶。我刚刚尝试了你的代码(YouBook),结果是:1约翰·迈克·约瑟夫·佩德罗2阿尔贝托我需要它:1约翰·迈克·约瑟夫·佩德罗2阿尔贝托·彼得3阿尔贝托我做错了什么?再次感谢!p、 d:如果我尝试使用GROUP BY(数字),每个数字会显示1个结果:1 John 2 Archie 3 Albertoth这类事情可以通过SQL查询完成,但这是我在SQL中不经常处理的罕见的表示方式这类事情可以通过SQL查询完成,但这是我在SQLI'v编辑的de question中不经常处理的罕见的演示内容,Armonage再次感谢,我的最终查询结果是:选择p.meta_key作为“meta_key”,p.meta_value作为“meta_value”,GROUP_CONCAT(名称)作为prueba p中的名称,其中p.meta_key=''u numero'按p.meta_值分组现在一切正常,再次感谢!我编辑了de question,Armonage再次感谢,我的最终查询结果是:选择p.meta_key作为“meta_key”,选择p.meta_value作为“meta_value”,选择GROUP_CONCAT(name)作为来自prueba p的名称,其中p.meta_key=“_numero”按p.meta_value分组现在一切正常,再次感谢!