在应用程序中,我将处理MySQL5.7中一个非常大的表中的数据.我将一次检索大约2000行数据.

这些行使用group_id列相互链接,每组最多3行.因此,当我对数据进行分页时,我不想打破分组,因为除非我拥有组中的所有行,否则数据没有意义.

id   group_id   data
---------------------------
1    25         item data
2    26         item data
3    26         item data
4    27         item data
5    27         item data
6    27         item data
7    29         item data
8    33         item data
9    33         item data

我将使用类似于下面的查询来检索数据.

select id, grouping_id, data
from table
limit <start>, 2000

对于如何在检索整个组的同时对数据进行分页,有什么 idea 吗?

推荐答案

我最终做的是分页不同的group_id个值,并进行自连接以获取每个选定组中的行.

select t.id, t.group_id, t.data from table t
right join (
    select group_id 
    from table
    group by group_id -- or select distinct
    order by id
    limit <start>, 1000
) t_
on t.group_id = t_.group_id;

通过这种方式,我将分页超过group_id个,而不仅仅是行.

假设每个组最多可以包含3行,在上面的示例中,每页检索的行数将从1000(如果每个组包含1行)到最多3000行(如果每个组包含3行).

Mysql相关问答推荐

在MySQL中查找具有公共值的列名

查询优化并提高性能

MySQL 8.0.33 Select json列时出现错误:排序内存不足,请考虑增加服务器排序缓冲区大小

Mysql - 按周分组但从 1 开始计数

如何从mysql中的不可用日期范围获取可用日期范围?

MySql SELECT 查找包含数字的区间的时间复杂度是多少?

Mysql 中相同列的相关 2 查询

为什么没有创建此触发器?

正则表达式模式相当于 mysql 中的 %word%

无法通过迁移在现有表中插入行 - Rails 6

如何使用 C++ 连接 mySQL 数据库

如何在 Laravel 5.1 中获取数据库中的表列表

有没有办法在 Zend Framework 1.5 中执行INSERT...ON DUPLICATE KEY UPDATE?

如何在 MySQL 上一次删除一系列记录?

有什么方法可以显示`gunzip < database.sql.gz | 的进度? mysql ...`进程?

安装 mysql-python (Windows)

INSERT ... 使用 WHERE 进行重复的密钥更新?

MySQL - 表'my_table'没有被锁定表锁定

如何将具有相同列值的mysql行分组为一行?

如果另一列为空,则 Select 一列