1

MySQL脚本上是否有任何解决方案来过滤具有特定间隔号的结果。

例如,如果我在数据库中有 100,000 条记录,并且我只想获取记录号 1000、2000、3000 等(步长为 1000)。

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

for($i=0, $i <= 100,000, $i = $i+1000) $filterResult[] = $record[$i];

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

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

您的帮助将不胜感激。

4

1 回答 1

5

你可以做:

SELECT *
FROM   tbl
WHERE  id % 1000 = 0

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

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

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

Wherecolumn1 = value AND column2 = value只是您在查询中进行的任何过滤的占位符。

于 2012-08-17T00:58:17.210 回答