2012-08-17 105 views
1

是否有MySQL脚本的任何解决方案来筛选具有特定间隔编号的结果。MySQL获取间隔记录

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

我可以得到整个结果做这在服务器端脚本(如100,000),并使用类似语法:

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

然而,正如你可以看到,它会拉应力系统为10万条记录将需要首先生成。

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

您的帮助将非常感激。

回答

5

你可以这样做:

SELECT * 
FROM tbl 
WHERE id % 1000 = 0 

但好像你不希望依赖于主键的值,而是一个结果集的行排名。

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

SELECT * 
FROM (
     SELECT  *, @rn:[email protected]+1 AS rank 
     FROM  tbl 
     CROSS JOIN (SELECT @rn:=0) var_init 
     WHERE  column1 = value AND 
        column2 = value 
     ) a 
WHERE a.rank % 1000 = 0 

哪里column1 = value AND column2 = value只为你是在为你的查询做什么过滤的占位符。

+0

谢谢Zene。但是,我不能依靠ID,因为它不是以数字顺序运行。例如前10条记录可能有ID 199,425,122,111,...... – Chanon 2012-08-17 01:05:59

+0

@Chanon,我刚刚更新了解决方案。试试看。 – 2012-08-17 01:06:50

+0

@ZaneBien他们不是为了顺序吗 - 通过添加一个订单将导致文件排序后,您的第一个查询将工作得很好。 – 2012-08-17 01:08:50