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

mysql:7422

From: yuji koga <yuji koga <koga-y@xxxxxxxxxx>>
Date: Tue, 08 Apr 2003 09:54:36 +0900
Subject: [mysql 07422] Re: 最新のレコードを○○件残して古いものを削除

お世話になります。古賀です。
東様、かわじ様、レス有り難うございました。

>  元記事には,このデータが随時更新されるデータであるかどうか
> 明記されていませんので,タイムスタンプ優先で考えていたのです
> が,実際のところどうでしょう?
>  > yuji koga <koga-y@xxxxxxxxxx>さま

そうですね。ケースバイケースで考えております。
例えば、レコード内に随時自動更新されるタイムスタンプと、
最初に登録した日時を記録するdatetime型フィールドの二つを置いておけば、
それらのどちらかで新旧判別をするかで、

ケース1:更新の有無にかかわらず、初回登録日時の古い物を削除
ケース2:初回登録日時にかかわらず、更新日時の古い物を削除

のどちらにも対応できるかな、と考えております。
差し当たって、今必要なのは「ケース1」の処理です。

>  以下のようなsql文でいいのかなぁと思いますが,どうでしょう。
> (総レコード件数が10,000件を超えない場合に10件だけ残すことを
> 想定しています。)
> 
> delete from db_name order by timestamp desc limit 10,10000;

同じような文を考えていましたが、初心者の自分にはマニュアルなどの
「order by 〜 limit 〜」文法がselect文の説明としてあげられており、
これが delete文でも使えるのかどうかよく分かりませんでした。

> delete 文に order by を使うことが出来るのは、MySQL 4.0 以降のようです。
> (それと、limit に offset は指定できないような気も)

とのことで、それはバージョンにより異なると知り、参考になりました。
自分の環境は3.23.53ですので、残念なところです。
今後はMySQL 4.0 以降への乗り換えも考えていきたいと思います。

> 元の話ですが、何か auto_increment なフィールドを仮に id とし、
> また、残す件数を 10000 件 として
> 
> 新しいものから10000件前の id を調べて
> select id from db_name order by id desc limit 10000,1;
> 
> 上記で id が 得られた場合のみ(10000件以上あった場合のみ)、
> それ以前のものを消す
> delete from db_name where id < (上記のid);

現時点でのケースでは、このやり方が良さそうに思われます。
是非、試させて頂きます。
タイムスタンプを優先させるなら、最初のselect文で

select timestamp 〜

としておいて、delete文で

delete from db_name where timestamp < (上記のtimestamp);

と応用することが出来そうです。
皆様、有り難うございました。

<? /*
株式会社メディアプレス   制作課  古賀裕二
       会社:koga-y@xxxxxxxxxx
       自宅:yuuukunn@xxxxxxxxxx
*/ ?>


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

      7412 2003-04-07 18:35 [Satoshi Iwanaga <iwa] インストール・別サーバへ接続            
      7413 2003-04-07 19:08 ┗[doumae <doumae@xxxxx]                                       
      7414 2003-04-07 19:51  ┣[yuji koga <koga-y@xx] 最新のレコードを○○件残して古いものを削除
      7415 2003-04-07 20:12  ┃┣[Daiju Azuma <daiju_a]                                   
      7418 2003-04-07 20:57  ┃┃┗[Shinya Kawaji <kawaj]                                 
      7420 2003-04-07 21:24  ┃┃ ┗[Daiju Azuma <daiju_a]                               
->    7422 2003-04-08 09:54  ┃┗[yuji koga <koga-y@xx]                                   
      7416 2003-04-07 20:16  ┣[Satoshi Iwanaga <iwa]                                     
      7423 2003-04-08 15:12  ┃┗[Satoshi Iwanaga <iwa]                                   
      7424 2003-04-08 15:47  ┃ ┗[doumae <doumae@xxxxx]                                 
      7425 2003-04-08 16:12  ┃  ┗[Satoshi Iwanaga <iwa]                               
      7426 2003-04-08 16:48  ┃   ┣["TOYOSHIMA,Masayuki"]                             
      7432 2003-04-09 14:26  ┃   ┗[Satoshi Iwanaga <iwa]                             
      7417 2003-04-07 20:21  ┗[doumae <doumae@xxxxx]