MySQL获取间隔记录

Cha*_*non 1 mysql

MySQL脚本上是否有任何解决方案可以使用特定的间隔号过滤结果.

例如,如果我在数据库中有100,000条记录,并且我只想获得记录号1000,2000,3000等(步骤1000).

我可以通过获取整个结果(例如100,000)在服务器端脚本上执行此操作,并使用如下语法:

for($i=0, $i <= 100,000, $i = $i+1000) $filterResult[] = $record[$i];
Run Code Online (Sandbox Code Playgroud)

但是,正如您所看到的,它会给系统带来压力,因为首先需要生成100,000条记录.

有没有可以从数据库脚本中完成的解决方案?请注意,主键可能不以1 - 100,000开头,因为结果基于where子句中的某些条件.

非常感谢您的帮助.

Zan*_*ien 5

你可以做:

SELECT *
FROM   tbl
WHERE  id % 1000 = 0
Run Code Online (Sandbox Code Playgroud)

但似乎您不想依赖主键值,而是依赖于结果集的行排名.

在这种情况下,你可以这样做:

SELECT *
FROM   (
       SELECT     *, @rn:=@rn+1 AS rank
       FROM       tbl
       CROSS JOIN (SELECT @rn:=0) var_init
       WHERE      column1 = value AND
                  column2 = value
       ) a
WHERE  a.rank % 1000 = 0
Run Code Online (Sandbox Code Playgroud)

哪里column1 = value AND column2 = value只是您在查询中进行过滤的占位符.