根据月份和日期MYSQL生成唯一ID

时间:2016-09-16 11:51:28

标签: mysql unique

我正在为医生开发一个小型软件供他个人使用。他希望患者的唯一身份证是一个月,一个月和一个月的患者数量的组合。例如对于2016年7月的第五位患者,id应为2016-07-05,当月份更改时,id应重新设置为1。如何在mysql db中实现?我可以把它放在PHP代码中,但我想在数据库表中执行它并保存每次执行的代码行。我四处搜索,但我无法找到解决方案。

2 个答案:

答案 0 :(得分:0)

您可以使用以下内容:

CONCAT(YEAR(NOW()),'-',MONTH(NOW()), '-', IFNULL((SELECT MAX(P) FROM person WHERE <...>)+1,1));

但这要求你在某处有一个柜台。

答案 1 :(得分:0)

这个问题可以通过对表中id的少量操作来解决。

  1. 仅比较ID的前缀以了解最后一个人所属的月份,例如2016-09-id仅将2016-09-与当前日期进行比较

  2. 如果月份或年份没有改变,那么我们只通过比较人的身份并将其增加1并与日期连接来找到最大身份

  3. 否则我们将日期与1

  4. 连接起来

    以下是表person(id, name)

    的示例查询
        insert into person(id, name) 
             select if(max(id) is null, concat(date_format(now(), '%Y-%m-'), '1'), 
                       if(max(substr(id, 1, 8)) = date_format(now(), '%Y-%m-'),
                           concat(date_format(now(), '%Y-%m-'), 
                           max(substr(id, 9)+1)), 
                       concat(date_format(now(), '%Y-%m-'), 1))) as nextid, 'lastperson' 
             from person;