我正在通过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
答案 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