2012-04-16 5 views
1

私はこのSELECT文の最後の3行だけをクエリしたいこのmysqlクエリを持っています。 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は:reply_id ASC BY ORDER

私はどのように私には理解していない:( post_replies.reply_idのDESCのLIMIT 3 BY posthash ORDER post_replies.post_hash =がpost_replies * FROM をSELECT)SELECT * FROMここに定義したように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

今私はそれを得る! ^^ありがとうございました^^ –

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 
関連する問題