[前][次][番号順一覧][スレッド一覧]

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]