没有DESC的MySQL逆序

时间:2010-02-20 09:52:36

标签: mysql

SELECT id FROM table LIMIT 8,3

结果为8,9,10

但我需要10,9,8

你怎么能这样做?如果添加“ORDER BY id DESC”,它将获得3,2,1

2 个答案:

答案 0 :(得分:6)

将查询放入子选择中,然后在外部选择中反转顺序:

SELECT id from (
    SELECT id FROM table ORDER BY id LIMIT 8, 3
) AS T1 ORDER BY id DESC

测试数据:

CREATE TABLE table1 (id INT NOT NULL);
INSERT INTO table1 (id) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11);

SELECT id from (
    SELECT id FROM table1 ORDER BY id LIMIT 8, 3
) AS T1 ORDER BY id DESC

结果:

10
9
8

请注意,子查询中的ORDER BY是必需的,否则订单是未定义的。感谢Lasse指出这一点!

答案 1 :(得分:3)

首先,如果您根本没有订购,那么您现在获得的8,9,10可能与所使用的索引有关。你确定将来不会改变吗?

我所得到的是,除非您指定订单,否则您不应该依赖它是您想要的订单。

所以我肯定会在该选项中添加一个订单以指定您想要的内容。否则你只是说“从这张桌子给我3个数字”,而不是“根据这些规则从这张桌子给我3个数字”。为什么3,2,1错了,但8,9,10对吗?你没有指定。

无论如何,要回答你的问题,你必须在限制之后订购,这意味着一个子选择:

SELECT id FROM (
    SELECT id FROM table LIMIT 8, 3
) AS dummy ORDER BY id DESC

但是,我会尝试使用此SQL,与有关指定的部分相关:

SELECT id FROM (
    SELECT id FROM table ORDER BY id LIMIT 8, 3
) AS dummy ORDER BY id DESC