如何从mysql数据库中选择每一个第二和第三条记录? 这是我正在使用的SQL
这个sql需要选择每一条记录:
$sql_1 = "SELECT * FROM test_db ORDER BY id DESC";
这个人需要选择每三个记录:
$sql_2 = "SELECT * FROM test_db ORDER BY id DESC";
我会更好地解释我的问题
http://pokit.org/get/img/f202a616d0b5e8fe4c6c5875b9a668be.jpg
这将是我的mysql数据库。数据库名称是test_db。我如何能够显示LIMIT 2
和DESC
所在的数据库中的每一条记录?订单必须与此(44,15,6)
答案 0 :(得分:1)
您应该定义"每隔一个记录"更清楚。如果有订单,每一秒都是合理的。
您的意思是id
吗?
那就是
select * from test_db where id % 2 == 0; // or id % 2 == 1
它应该是其他一些顺序的每一秒吗?
然后我会去(编辑:按需要在subselect中排序)
set @counter:=0;
select * from
( select @counter:=@counter+1 as cnt, t.*
from test_db as t
order by inserted desc) as isel
where cnt % 2 = 0;
或者,如果您想按升序ID排序以找到要扔掉的第一行,请使用
set @counter:=0;
select * from
( select @counter:=@counter+1 as cnt, t.*
from test_db as t
order by id) as isel
where cnt % 2 = 0
order by id desc;
或者,如果您想按降序ID排序以找到要丢弃的第一行,请使用
set @counter:=0;
select * from
( select @counter:=@counter+1 as cnt, t.*
from test_db as t
order by id desc) as isel
where cnt % 2 = 0
;
我希望你明白这一点。
答案 1 :(得分:0)
可以使用mod
完成此操作。
每2,4,6,记录:
SELECT * FROM test_db WHERE mod(id, 2) <> '1';
对于要获取的奇数行(1,3,5,7):
SELECT * FROM test_db WHERE mod(id, 2) <> '0';
修改强>
根据您在评论中提到的更改,这应该有效:
SELECT *
FROM (
SELECT
@row := @row +1 AS rownum, id
FROM (
SELECT @row :=0) r, test_db
) ranked
WHERE rownum %4 =1
第二次编辑:
阅读完编辑的问题后,做了一些更改,这应该没问题了:
SELECT *
FROM (
SELECT
@row := @row +1 AS rownum, id
FROM (
SELECT @row :=0) r, test_db
) ranked
WHERE rownum %2 = 0 ORDER BY id DESC LIMIT 5