我只是想知道在日期字段中是否可以有多个记录?对于VARCHAR,我知道这有效:
util.inspect
但是我想知道DATE字段是否可以实现相同的效果?原因是每次记录更新时都会保存日期。非常感谢任何帮助。
实施例: 19-12-2016,20-12-2016,21-12-2016
答案 0 :(得分: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.