【问题标题】:In MySQL, how do I select the latest articles EXCEPT for the last 3 articles在MySQL中,我如何选择最新的文章除了最后3篇文章
【发布时间】:2019-04-16 11:43:24
【问题描述】:

在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 需要通过一些数学计数或其他东西进行更改。

【问题讨论】:

标签: php mysql


【解决方案1】:

您可以按 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 lasts 偏移量 3

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

输出

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

查询 #3 获取 3 lasts offset 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

【讨论】:

  • 答案是正确的,但需要更多解释:SELECT 通常从 1 - 100 订购 id。ORDER DESC 将其倒置,从 100 - 1 订购。LIMIT 3,3 表示:跳过前 3 个(从 nr 4 开始),然后取 3 个。
  • @Michel 我同意你的观点,你可以编辑我的答案来添加这些信息,我的不是那么清楚
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-12
相关资源
最近更新 更多