MySql从数据库

时间:2015-09-19 09:41:08

标签: php mysql

如何从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 2DESC所在的数据库中的每一条记录?订单必须与此(44,15,6)

类似

2 个答案:

答案 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';

1st SQL Fiddle

修改

根据您在评论中提到的更改,这应该有效:

SELECT *
FROM (
    SELECT
        @row := @row +1 AS rownum, id
    FROM (
        SELECT @row :=0) r, test_db
    ) ranked
WHERE rownum %4 =1

2nd SQL Fiddle

第二次编辑:

阅读完编辑的问题后,做了一些更改,这应该没问题了:

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

3rd SQL Fiddle