mysql:7556
From: Shinya Kawaji <Shinya Kawaji <kawaji@xxxxxxxxxx>>
Date: Sat, 19 Apr 2003 01:30:09 +0900
Subject: [mysql 07556] Re: 最新の xx 件を小さい順 sort して出力するには?
かわじ、です。 > > id_no というint型データをKEYに持つテーブルで、現在データが > > id_no=1〜100 の100件存在するとします。 > > (データ総数は随時更新されますので100件と決まっているわけではありませ > > ん) > > そのデータの 最後5件表示するのに以下のSQL文を使っています > > SELECT id_no FROM table_a ORDER BY id_no DESC LIMIT 5; > > そのSQLを吐いた後、 > さらにSELECTして、ORDER BY で昇順表示って > 方法はどうでしょうか? > > ※試してないので出来なかったらごめんなさい 上記のことを TEMPORARY TABLE を使って書くと、 CREATE TEMPORARY TABLE tmp_a SELECT * FROM table_a ORDER BY id_no DESC LIMIT 5; SELECT * FROM tmp_a ORDER BY id_no ASC; といったところでしょうか(これは試しました)。 TEMPORARY TABLE を作りたくなければ、ユーザー変数を使って、 以下のようにも出来ます。 SELECT (@c:=id_no) FROM table_a ORDER BY id_no DESC LIMIT 5,1; SELECT * FROM starter WHERE id_no > @c ORDER BY id_no ASC; まず最初の SELECT 文で、最新から数えて 6番目の id_no を @c に代入します。 次の SELECT 文で、その @c よりも後ろの id_no の行( 5件)を表示します。 ただし、この二つの SELECT 文の間に、他のクライアントから INSERT や DELETE を挟まれると正確な結果が出なくなるので、そのような事が懸念される 場合には、上記二つの SELECT 文を LOCK TABLES で囲む必要があります。 LOCK TABLES table_a READ; SELECT (@c:=id_no) FROM table_a ORDER BY id_no DESC LIMIT 5,1; SELECT * FROM starter WHERE id_no > @c ORDER BY id_no ASC; UNLOCK TABLES;
7542 2003-04-18 14:05 [aimitsu katoh <akimi] 最新の xx 件を小さい順 sort して出力するには? 7544 2003-04-18 14:22 ┣[Taoka Fumiyoshi <fmy] 7545 2003-04-18 14:23 ┗[小川星児 <sogawa@xxx] 7546 2003-04-18 14:51 ┗[aimitsu katoh <akimi] 7548 2003-04-18 15:23 ┣[小川星児 <sogawa@xxx] -> 7556 2003-04-19 01:30 ┃┗[Shinya Kawaji <kawaj] 7574 2003-04-20 17:55 ┗[aimitsu katoh <akimi]