如何从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)
您应该更清楚地定义"每秒钟记录"。只有有秩序,每一秒都是合理的。
你指的是id
吗?
那么它就是
select * from test_db where id % 2 == 0; // or id % 2 == 1
是否应该以其他顺序排列?
然后我会选择(编辑:order by需要在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
;
我希望你能明白。
可以使用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
第2页
第二个编辑:
在阅读了你编辑过的问题之后,做了一些修改,这应该没问题:
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