我正在尝试选择一组特定的记录,这些记录应该像这样:
查询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
我还没有测试它,但我会假设它有效,但我怎么能做第一次查询呢?
由于
答案 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会在长表上使用临时表,但不会在较短的表单上使用(未经验证)