2012-04-16 48 views
1

我有這個mysql查詢,我只想查詢我的SELECT語句的最後3行,並且我想再次將我的查詢重新排序爲ASC順序,因爲子查詢是在DESC中。獲取SELECT語句中的最後3行,並使其成爲ASC訂單

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 WHERE post_replies = post_replies.post_hash:posthash ORDER BY post_replies.reply_id DESC LIMIT 3)ORDER BY reply_id ASC

我不如何​​我明白可以把這裏的mysql別名定義在這裏here

我怎樣才能讓我的查詢只得到我的select語句的最後3行,並使結果在ASC順序?

回答

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 
+0

現在我明白了! ^^非常感謝你^^ – 2012-04-16 03:00:40

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 
相關問題