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

mysql:3989

From: Tybalt of Capulet <Tybalt of Capulet <ice-man@xxxxxxxxxx>>
Date: Fri, 13 Jul 2001 01:01:33 +0900
Subject: [mysql 03989] INTERVAL がうまく動きません

神崎です。

INTERVALを使い該当データを削除しようとしているのですがうまくいきません。

[テーブル:A]
id varchar(10)
inputday timestamp

[サンプルデータ]
1	20010713012030
2	20010713014030
3	20010713015030

下記の様なスクリプトをcronで動かしています。
ところがこれをAM2:45に動かすとデータが全て削除されてしまいます。
サンプルデータからするとINTERVALが1なのでidが1と2のデータが消えて
3は残って欲しいわけです。
--------------ここから------------------------------
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$mon = $mon + 1;
$year += 1900;
$mon = substr('0'.$mon,-2,2);
$hour = substr('0'.$hour,-2,2);
$nowday = $year.$mon.$mday.$hour.$min.$sec;

# 1時間以上経過しているAテーブルのデータの削除
$sth = $dbh->prepare( qq{
  DELETE FROM A WHERE (inputday + INTERVAL 1 HOUR) < ?
}) || die "Can't prepare statement:" . $dbh->errstr . "\n";

$rc = $sth->execute($nowday)
	|| die "Can't execute statement:";
$sth->finish;
$dbh->disconnect();
exit;
--------------ここまで------------------------------

ちなみに下記の様に?の部分に直接変数を入れると今度は
該当データが削除できません。
--------------ここから------------------------------
$sth = $dbh->prepare( qq{
  DELETE FROM A WHERE (inputday + INTERVAL 1 HOUR) < $nowday
}) || die "Can't prepare statement:" . $dbh->errstr . "\n";

$rc = $sth->execute
	|| die "Can't execute statement:";
--------------ここまで------------------------------

INTERVALとtimestamp型の使い方が間違っているのでしょうか?
どなたかおわかりのかた教えていただけませんでしょうか?

[環境]
mysql-3.23.39
perl v5.6.0
Red Hat Linux7.0


________________________________R_y_u_____
神崎 隆
Mail:ice-man@xxxxxxxxxx
_____K_a_n_z_a_k_i________________________


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

->    3989 2001-07-13 01:01 [Tybalt of Capulet <i] INTERVAL がうまく動きません             
      4003 2001-07-13 21:15 ┗[YONEMOTO Kazumasa <y]                                       
      4005 2001-07-14 00:40  ┗[Tybalt of Capulet <i]