我有一张类似于:
的表格ID | NAME | GROUP_ID
1 | rand_str | 4
2 | rand_str | 2
3 | rand_str | 3
4 | rand_str | 0
5 | rand_str | 3
6 | rand_str | 1
7 | rand_str | 3
8 | rand_str | 3
9 | rand_str | 1
10 | rand_str | 0
ID是唯一ID,名称valie不为null且包含varchar值,group_id是最多2位数的正数。
假设查询返回此表。
我想要的是,使用PHP,显示按group_id分组的结果,如果可能的话,将编号最多的编号排序到最少编号,“0”始终是最后一个,无论它是多少填充。
结束了结果:
组ID 3存在3次,所以
我怎样才能做到这一点?
谢谢。
答案 0 :(得分:4)
使用子查询确定每个组的计数(以及它的顺序),然后将其与您的数据连接以检索记录:
SELECT my_table.* FROM my_table JOIN (
SELECT GROUP_ID,
IF(GROUP_ID = 0, -1, COUNT(*)) AS rank
FROM my_table
GROUP BY GROUP_ID
) AS t USING (GROUP_ID)
ORDER BY t.rank DESC
在sqlfiddle上查看。
然后,您将在PHP中循环结果,跟踪最后一条记录的GROUP_ID
并与当前记录进行比较,看看您现在是否在新组中:
$last = null;
echo "<table>";
while ($row = $stmt->fetch()) {
if ($row['GROUP_ID'] !== $last) {
if ($last !== null) echo "</tr>";
echo "<tr><th scope='row'>Group " . html_entities($row['GROUP_ID']) . "</th>";
$last = $row['GROUP_ID'];
}
echo "<td>ID " . html_entities($row['ID']) . "</td>";
}
echo "</tr></table>";
答案 1 :(得分:0)
看看那里:http://www.tizag.com/mysqlTutorial/mysqlgroupby.php
您将学习如何使用Group By SQL关键字:)
答案 2 :(得分:-1)
您可以使用以下查询执行所需操作
select group_concat(id),name, group_id, count(*) entries from grp
group by group_id
order by entries desc ;