如何选择每个第n条记录?

时间:2012-01-08 17:15:46

标签: php mysql

我正在尝试选择一组特定的记录,这些记录应该像这样:

查询1应选择ID = 1,2,3跳过4 - 5,6,7跳过8 - 9,10,11跳过12等等。 查询2应该只选择每4个ID = 4,8,12,16等等。

我发现此代码选择每第4条记录:

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

我还没有测试它,但我会假设它有效,但我怎么能做第一次查询呢?

由于

2 个答案:

答案 0 :(得分:2)

select * from table where id mod 4 <> 0

答案 1 :(得分:2)

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

将选择第(0),第4,第8,......行。以类似的方式,您可以选择其他:

SELECT *
FROM (
    SELECT
        @row := @row +1 AS rownum, noun
    FROM (
        SELECT @row :=0) r, nouns
    ) ranked
WHERE rownum %4 <> 1 

此SQL可缩短为

SELECT
    @row := @row +1 AS rownum, noun
FROM
  (SELECT @row :=0) r,
  nouns
WHERE (@row % 4) [=|<>] 1 

这可能非常重要,因为我怀疑MySQL会在长表上使用临时表,但不会在较短的表单上使用(未经验证)