1

SELECT ステートメントの最後の 3 行のみを照会するこの mysql クエリがあり、サブクエリが DESC にあるため、クエリを 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 ステートメントは次のとおりです。

ここで定義されているように、mysql エイリアスをここに配置する方法がわかりません

クエリで select ステートメントの最後の 3 行のみを取得し、結果を ASC 順にする方法を教えてください。

4

2 に答える 2

6

エラーは、subselect 何かを呼び出す必要があることを示しているだけです。副選択の後の右括弧の後に別名を置きます。これはうまくいくはずです:

 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 に答える