2016-12-21 8 views
1

日付フィールドに複数のレコードを持つことが可能かどうかは疑問でしたか? VARCHARのために私は、これが機能することを知っている:PHP、MySQL - DATEフィールドの複数のレコード

dater = CONCAT_WS(',', dater, '$dater') 

同じことがDATEフィールドを用いて達成することができる場合、私は不思議が?この理由は、レコードが更新されるたびに日付が保存されるためです。どんな助けでも大歓迎です。

例: 19-12-2016、20-12-2016、21-12-2016

+1

no。日付は単一の日付です。 –

+0

私はその可能性は考えていません。なぜVARCHARではなくDATEフィールドを使用する必要がありますか? –

+0

日付は特定の形式を持っています – Beginner

答えて

1

あなたの最善の策は、スキーマの更新テーブルを追加することです。

メインテーブルがinfoと呼ばれ、これらの列があるとします。

info_id INT (autoincrementing) 
    info_val VARCHAR(250) 
    info_last_update TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 

次に、info_updatesというテーブルを追加します。これは、これらの列があります。

info_update_id INT (autoincrementing) 
    info_id  INT (points to info table row) 
    info_update TIMESTAMP DEFAULT CURRENT_TIMESTAMP 
    info_why  VARCHAR(250) (text describing update, if you like) 

その後、あなたはinfoで行を挿入または更新するたびに、あなたもinfo_updates内の行を挿入します。

次に、あなたはこのように、最初に最新の更新で、更新履歴を取得することができます:あなたは、カンマ区切りのテキストフィールドに、あなたの更新のタイムスタンプを隠しておく場合

SELECT info.info_id, info.info_val, 
      GROUP_CONCAT(info_updates.info_update ORDER BY info_updates.info_update) updates 
    FROM info 
    JOIN info_updates ON info.info_id = info_updates.info_id 
    GROUP BY info.info_id, info.info_val 
    ORDER BY MAX(info_updates.info_update) DESC 

、これのどれも良い検索のものが適切に動作します。

これは余分な作業のようです。しかし、カンマで区切られたテキストフィールドは、長期的にはるかに余分な作業を引き起こします。

教授Richard Snodgrass教授は、このトピックに関する素晴らしい本を書いて、利用可能にしました。 Developing Time-Oriented Database Applications in SQL.

関連する問題