在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
,需要通过一些数学计算或其他方式进行更改。
答案 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 |