按DESC排序反向结果

时间:2016-09-10 10:28:44

标签: sql sql-order-by

我正在通过DESC以sql顺序检索一些数据,然后我想要反转结果。我是通过将数据推送到一个数组然后使用array_reverse来实现这一点的,但我发现它对CPU时间非常不利,并且只想使用正确的SQL查询。

我查看了这个帖子https://stackoverflow.com/questions/12534248/sql-server-reverse-order-after-using-desc#=,但似乎无法使其与我的查询一起使用。

SELECT live.message,
       live.sender,
       live.sdate,
       users.online
FROM live, users
WHERE users.username = live.sender
ORDER BY live.id DESC
LIMIT 15

2 个答案:

答案 0 :(得分:2)

您可以将查询放入子查询中,然后颠倒顺序:

SELECT t.message,
       t.sender,
       t.sdate,
       t.online
FROM
(
    SELECT live.id,
           live.message,
           live.sender,
           live.sdate,
           users.online
    FROM live
    INNER JOIN users
        ON users.username = live.sender
    ORDER BY live.id DESC
    LIMIT 15
) t
ORDER BY t.id ASC

您会注意到我用隐式JOIN替换了显式 INNER JOIN。通常认为在FROM子句(q.v.ANSI-92标准)中使用逗号是不合适的,因为它使查询更难阅读。

答案 1 :(得分:1)

您可以使用其他查询打包查询,并使用asc进行排序。由于您希望按live.id订购,因此必须将其包含在内部查询中,以便外部查询可以按其排序:

SELECT   message, sender, sdate, online 
FROM     (SELECT   live.message, live.sender, live.sdate, users.online, live.id 
          FROM     live, users
          WHERE    users.username = live.sender 
          ORDER BY live.id DESC 
          LIMIT    15) t
ORDER BY id ASC