MySql每隔一秒和第三次从数据库中选择记录


MySql select every second, and third record from database

如何从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