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?)按字段数据分组结果的主要内容,如果未能解决你的问题,请参考以下文章