• 締切済み

並べ替えたレコードセットをまた並べ替えたい

宜しくお願いします。 auto_incrementの項目(SEQ)を持ったテーブル(TEST)があります。 直近10件や直近20件等のレコードを取り出すため select * from TEST order by SEQ desc limit 10 と書いたのですが、 抽出したレコードをPHPでブラウザに SEQ順に読み込み吐き出したいと思っております。 複問い合わせ等素人なりに試してみたのですが、 Every derived table must have its own aliasと怒られています。 どのようにすればよいのでしょうか。 ご教示願います、宜しくお願い致します。

みんなの回答

  • mooboogie
  • ベストアンサー率68% (28/41)
回答No.5

_rowidを使ったら如何でしょうか。 理由・注意点は、参考URLに詳しく書かれています。

参考URL:
http://www.mysql.gr.jp/mysqlml/mysql/msg/3306
回答No.4

MySQLの質問をする場合は、使用しているバージョンを書いてください。せっかく具体的なSQLを提示しても、あなたがお使いのバージョンでは動かないということがあり得ます。 【バージョン5くらいから】バージョン4.1でも動くかも select * from (select * from TEST order by SEQ desc limit 10) as x order by SEQ; 【バージョン5より古い場合】 create temporary table W_TEST select * from TEST order by SEQ desc limit 10; select * from W_TEST order by SEQ; =====ここからは、前の質問に関して一言===== このカテゴリで「decimal(m,n)」の質問をし、お礼に「汎用機の感覚で定義していた」と書いていましたよね?汎用機のRDBMSやプログラミング言語でも、私の知る限りでは「decimal(m,n)」のmは、「整数部+小数以下の桁数」ですよ?前の質問を見た人が、「汎用機は違うんだ」と思い込まれたくないので念のため。

回答No.3

元々のエラー(Every derived table must have its own alias)は、 select * from (select * from TEST order by SEQ desc limit 10) order by SEQ; というようなSQLを書いていたんだと推測しています。 だとしたら、 select * from (select * from TEST order by SEQ desc limit 10) AS A order by SEQ; とすれば、エラーは発生しないと思いますよ。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

テンポラリにおとして再表示してみてください。 CREATE TEMPORARY TABLE TEMP_SEQ SELECT * FROM TEST order by SEQ desc limit 10; SELECT * FROM TEMP_SEQ order by SEQ;

Claudia
質問者

お礼

期待する動きができました。 一度テンポラリにおとすことなく 逆fetchみたいなことができればと思ったのですが、 そんな都合のよいものなんてないのでしょうか。 今はyambe様のアドバイスに従いうまく動いております、 ありがとうございました。

回答No.1

再並び替えは、MySQL(SQL文)でやってもよいでしょうけども、レコード数が少ないならば、PHPでやってもよいと思います。 PHPでやるならば、array_multisort関数でも使ってみたらどうでしょう。 http://jp2.php.net/manual/ja/function.array-multisort.php このページの例3などが参考になります。

Claudia
質問者

補足

該当ページの例3を参考に、自分のテーブルに合わせて作ってみたのですが うまくできず。。技術(理解)不足です。。 うまくできればtemporaryを作らずスマートにできるかと思ったのですが。 今はテンポラリーテーブルを一旦作成して凌いでますが、 そのうち理解が深まったら利用させていただこうと思います。 ありがとうございました。

関連するQ&A