获取 SELECT 语句中的最后 3 行并将其设为 ASC 顺序
Posted
技术标签:
【中文标题】获取 SELECT 语句中的最后 3 行并将其设为 ASC 顺序【英文标题】:Get last 3 rows in a SELECT statement and make it ASC order 【发布时间】:2012-04-27 10:23:17 【问题描述】:我有这个 mysql 查询,我只想查询我的 SELECT 语句的最后 3 行,并且我想再次将我的查询重新排序为 ASC 顺序,因为子查询在 DESC 中。
SELECT * FROM(
SELECT *
FROM post_replies
WHERE post_replies.post_hash=:posthash
ORDER BY post_replies.reply_id DESC
LIMIT 3)
ORDER BY reply_id ASC
这是出现的错误
CDbCommand 未能执行 SQL 语句:SQLSTATE[42000]: 语法错误或访问冲突:1248 每个派生表必须有 它自己的别名。执行的 SQL 语句是:SELECT * FROM( SELECT * FROM post_replies WHERE post_replies.post_hash=:posthash ORDER BY post_replies.reply_id DESC LIMIT 3) ORDER BY reply_id ASC
我不明白如何将 mysql 别名按定义的 here 放在这里
如何让我的查询只获取我的 select 语句的最后 3 行并按 ASC 顺序生成结果?
【问题讨论】:
【参考方案1】:错误只是告诉您需要调用您的子选择。您将别名放在子选择之后的右括号之后。这应该有效:
SELECT a.* FROM(
SELECT *
FROM post_replies
WHERE post_replies.post_hash=:posthash
ORDER BY post_replies.reply_id DESC
LIMIT 3) a
ORDER BY a.reply_id ASC
【讨论】:
【参考方案2】:我不是 MySQL 专家,但别名会放在派生表之后,如下所示:
SELECT * FROM(
SELECT *
FROM post_replies
WHERE post_replies.post_hash=:posthash
ORDER BY post_replies.reply_id DESC
LIMIT 3) ---> AS MyDerivedTable <---
ORDER BY reply_id ASC
【讨论】:
以上是关于获取 SELECT 语句中的最后 3 行并将其设为 ASC 顺序的主要内容,如果未能解决你的问题,请参考以下文章