1

我有这个 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 Alias 放在这里

如何让我的查询只获取我的选择语句的最后 3 行并按 ASC 顺序生成结果?

4

2 回答 2

6

该错误只是告诉您需要调用您的子选择。您将别名放在子选择之后的右括号之后。这应该有效:

 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
于 2012-04-16T02:56:59.993 回答
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
于 2012-04-16T02:56:27.560 回答