0

「日付から現在までの日数を表示するフィールドを作成する必要があります。

TABLE:  reg_add

+------------+---------+
| Name       | Type    |
+------------+---------+ 
| hm_date    | date    |
+------------+---------+ 
| total_days | date    |
+------------+---------+ 

私のクライアントは、たとえば "hm_date" に次の日付を入力します: 2012 年 5 月 1 日。

現在の日付で 2012 年 5 月 1 日までの合計日数を表示するには、「total_days」が必要です。

サーバー側でこれを実現したいのですが、これは私にとって少し新しいことです。

「total_days」が常に更新されるようにTRIGGERを作成する必要があります

私はこれから始めましたが、トリガーを作成して正しくするのに問題があります:

SELECT DATEDIFF(curdate(),hm_date) as total_days FROM reg_add

どんな助けでも大歓迎です。

エリック

4

4 に答える 4

2

TIMESTAMPDIFF関数を使用して、非常に簡単にその場で計算できます-

SELECT TIMESTAMPDIFF(DAY, hm_date, NOW()) FROM reg_add;
于 2012-05-11T14:30:47.087 に答える
1

MySQL Trigger Docs を調べたところ、Insert、Update、および Delete のイベント タイプのトリガーのみを作成できます。したがって、Trigger は実際には total_days フィールド (int である必要があります) を必要に応じて更新しません。[時間ベースでフィールドを更新したいようです (別名 x 時間ごとの更新)]。

ドキュメントは次のとおりです。http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html

フィールドを更新する 1 日に 1 回 (または複数回) 実行される cron ジョブを php で作成することをお勧めします。

cron では、SQL ステートメントを 1 つ実行するだけで済みます (これは、テーブル全体を調べて、各行の total_days フィールドを更新する必要があります)。

UPDATE reg_add SET total_days = DATEDIFF(curdate(),hm_date)
于 2012-05-11T14:05:15.387 に答える
0

エリック、私は tsql を使用しており、mySQL にはあまり詳しくありませんが、tsql ではDATEDIFF関数に 3 つのパラメーターが必要です。構文は

DATEDIFF(date part, date1, date2).

私は試してみますDATEDIFF(d,GETDATE(),hm_date) AS total_days FROM reg_add

于 2012-05-11T13:57:45.843 に答える
0

トリガーの代わりに、ビューを使用できます。

CREATE VIEW reg_add_with_total_days_VIEW
  AS
SELECT hm_date
     , DATEDIFF( CURDATE(), hm_date ) AS total_days
FROM reg_add ;

次に、合計日数が必要になるたびにビューを使用できます。これはその場で計算されます。

SELECT hm_date, total_days
FROM reg_add_with_total_days_VIEW 

SQL-Fiddleで動作することがわかります

于 2012-05-11T14:58:13.160 に答える