假设一张数据表有N条记录(ID不连续),我想一条语句取出 第1,101,201,301,401,·····条记录,该肿么办呢?
------解决思路----------------------
SET @i = 0;
SELECT (@i:=@i+1) AS nid, id FROM tbl
WHERE nid MOD 100 = 1
------解决思路----------------------
mod取模,模100结果为1即可
where mod(行号,100)=1
行号自己求了
------解决思路----------------------
2:
SELECT * FROM
(
SELECT (@i:=@i+1) AS i, tbl.* FROM tbl, (SELECT @i:=0) AS it
) AS t
WHERE t.i MOD 100 =1
------解决思路----------------------
这里运用mysql的用户定义变量,来实现递增:
mysql> select @row:= @row+1 as row,t.* from tb2 t,(select @row := 0)r;
+------+------+------+
------解决思路----------------------
row
------解决思路----------------------
id
------解决思路----------------------
name
------解决思路----------------------
+------+------+------+
------解决思路----------------------
1
------解决思路----------------------
1
------解决思路----------------------
aa
------解决思路----------------------
------解决思路----------------------
2
------解决思路----------------------
1
------解决思路----------------------
bb
------解决思路----------------------
------解决思路----------------------
3
------解决思路----------------------
1
------解决思路----------------------
cc
------解决思路----------------------
------解决思路----------------------
4
------解决思路----------------------
1
------解决思路----------------------
aa
------解决思路----------------------
------解决思路----------------------
5
------解决思路----------------------
2
------解决思路----------------------
aa
------解决思路----------------------
------解决思路----------------------
6
------解决思路----------------------
2
------解决思路----------------------
bb
------解决思路----------------------
------解决思路----------------------
7
------解决思路----------------------
2
------解决思路----------------------
dd
------解决思路----------------------
------解决思路----------------------
8
------解决思路----------------------
2
------解决思路----------------------
cc
------解决思路----------------------
------解决思路----------------------
9
------解决思路----------------------
10
------解决思路----------------------
a
------解决思路----------------------
------解决思路----------------------
10
------解决思路----------------------
1
------解决思路----------------------
a
------解决思路----------------------
------解决思路----------------------
11
------解决思路----------------------
2
------解决思路----------------------
a
------解决思路----------------------
------解决思路----------------------
12
------解决思路----------------------
1
------解决思路----------------------
b
------解决思路----------------------
+------+------+------+
12 rows in set (0.01 sec)
然后,在取模数就可以了:
mysql> select * from (select @row:= @row+1 as row,t.* from tb2 t,(select @row := 0)r) t where t.row mod 100 =1;
+------+------+------+
------解决思路----------------------
row
------解决思路----------------------
id
------解决思路----------------------
name
------解决思路----------------------
+------+------+------+
------解决思路----------------------
1
------解决思路----------------------
1
------解决思路----------------------
aa
------解决思路----------------------
+------+------+------+
1 row in set (0.02 sec)
------解决思路----------------------
具体在理解:
select * from (select @row:= @row+1 as row,t.* from tb2 t,(select @row := 0)r) t where t.row mod 100 =1;
1、(select @row := 0)r 实际上就是构建一个虚拟表,用户定义变量@row ,初始赋值为0
2.、@row:= @row+1 就是对于tb2表的每一行,会重新计算@row变量的值。
比如第一行的时候,@row为0,那么@row+1 = 1,于是第一行就是1.
第二行,就是@row+1 = 1+1 = 2 这么重复下去。