2016-12-21 35 views
1

我只是想知道是否有可能在日期字段中有多個記錄?對於VARCHAR我知道這個工程:PHP,MySQL - 日期字段中的多個記錄

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

不過,我只是想知道如果同樣可以用DATE字段來實現?原因是每次記錄更新時都會保存日期。任何幫助是極大的讚賞。

例子: 19-12-2016,20-12-2016,21-12-2016

+1

沒有。日期是一個日期。 –

+0

我不認爲它是可能的,爲什麼你需要使用DATE字段而不是Varchar ?. –

+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 

如果您藏匿更新時間戳到一個逗號分隔文本字段,沒有這好的檢索內容將正常工作。

這可能看起來像額外的工作。但是,從長遠來看,逗號分隔的文本字段會導致更多的額外工作。

理查德斯諾德格拉斯教授寫了一本關於這個主題的優秀書,並提供了它。 Developing Time-Oriented Database Applications in SQL.

相關問題