PHP,MySQL-日期字段中有多条记录

PHP,MySQL-日期字段中有多条记录,php,mysql,Php,Mysql,我只是想知道在一个日期字段中是否可能有多个记录?对于VARCHAR,我知道这是可行的: dater = CONCAT_WS(',', dater, '$dater' ) 然而,我只是想知道,是否同样可以实现与日期字段?原因是每次更新记录时都会保存日期。非常感谢您的帮助 例如: 2016年12月19日、2016年12月20日、2016年12月21日您最好的选择是将更新表添加到您的架构中 假设您的主表名为info,包含以下列 info_id INT (autoincrementing)

我只是想知道在一个日期字段中是否可能有多个记录?对于VARCHAR,我知道这是可行的:

dater = CONCAT_WS(',', dater,  '$dater' )
然而,我只是想知道,是否同样可以实现与日期字段?原因是每次更新记录时都会保存日期。非常感谢您的帮助

例如:
2016年12月19日、2016年12月20日、2016年12月21日

您最好的选择是将更新表添加到您的架构中

假设您的主表名为
info
,包含以下列

   info_id  INT  (autoincrementing)
   info_val VARCHAR(250)
   info_last_update TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
然后,添加一个名为
info\u 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\u 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
如果您将更新时间戳隐藏在一个逗号分隔的文本字段中,那么这些优秀的检索功能都无法正常工作

这似乎是额外的工作。但是,从长远来看,逗号分隔的文本字段会导致更多的额外工作


理查德·斯诺德格拉斯教授就这一主题写了一本好书,并出版了

不。日期是一个单一的日期。我认为这是不可能的,为什么你需要使用日期字段而不是Varchar?不可能日期有它的特定格式你不能也不应该。相反,您应该通过添加存储日期并将其连接到现有表的新表来规范化数据库。您应该使用列,如果要保存多条记录,则应该使用
json
保存多条记录。首先将日期转换为json并保存到
text
列中