在MySQL中,如何选择最近3篇文章以外的最新文章

时间:2019-04-16 11:43:24

标签: php mysql

在MySQL中,执行查询时,如何选择除最后3篇文章以外的最新文章?假设我有100篇文章,而我想选择文章编号97、96和95。但商品编号不是98、99和100。

但是我需要它是动态的。因此,如果我在数据库中再插入100篇文章,那么我将需要文章编号197、196和195。

我现在所拥有的是:

$query = "SELECT id, map, title, summary, video, date, publish, difficulty FROM articles WHERE publish = 1 AND map = 'MOVEMENT' AND id > 1 ORDER BY date DESC LIMIT 1";

我认为是id > 1,需要通过一些数学计算或其他方式进行更改。

1 个答案:

答案 0 :(得分:2)

您可以按ID降序排列结果,仅获得3个结果,并使用3作为偏移量。

例如:

SELECT id,
       map,
       title,
       summary,
       video,
       date,
       publish,
       difficulty
FROM articles
WHERE publish = 1
AND map = 'MOVEMENT'
AND id > 1
ORDER BY id DESC LIMIT 3, 3;

模式(MySQL v5.7)

CREATE TABLE test
(
  id INT NOT NULL PRIMARY KEY AUTO_INCREMENT
);

INSERT INTO test VALUES (DEFAULT),
                        (DEFAULT),
                        (DEFAULT),
                        (DEFAULT),
                        (DEFAULT),
                        (DEFAULT),
                        (DEFAULT),
                        (DEFAULT),
                        (DEFAULT),
                        (DEFAULT),
                        (DEFAULT),
                        (DEFAULT),
                        (DEFAULT),
                        (DEFAULT),
                        (DEFAULT),
                        (DEFAULT),
                        (DEFAULT),
                        (DEFAULT),
                        (DEFAULT);

查询#1:最后一个ID

SELECT MAX(id) AS "Last id"
FROM test;

输出

| Last id |
| ------- |
| 19      |

查询#2获取3个持续时间偏移量3

SELECT id
FROM test
ORDER BY id DESC LIMIT 3, 3;

输出

| id  |
| --- |
| 16  |
| 15  |
| 14  |

查询#3获取3个持续偏移量3并固定顺序

SELECT * FROM
(
  SELECT id
  FROM test
  ORDER BY id DESC LIMIT 3, 3
) AS t
ORDER BY t.id ASC;

输出

| id  |
| --- |
| 14  |
| 15  |
| 16  |

View on DB Fiddle