あなたの最善の策は、スキーマの更新テーブルを追加することです。
メインテーブルが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.
no。日付は単一の日付です。 –
私はその可能性は考えていません。なぜVARCHARではなくDATEフィールドを使用する必要がありますか? –
日付は特定の形式を持っています – Beginner