我正在为医生开发一个小型软件供他个人使用。他希望患者的唯一身份证是一个月,一个月和一个月的患者数量的组合。例如对于2016年7月的第五位患者,id应为2016-07-05,当月份更改时,id应重新设置为1。如何在mysql db中实现?我可以把它放在PHP代码中,但我想在数据库表中执行它并保存每次执行的代码行。我四处搜索,但我无法找到解决方案。
答案 0 :(得分:0)
您可以使用以下内容:
CONCAT(YEAR(NOW()),'-',MONTH(NOW()), '-', IFNULL((SELECT MAX(P) FROM person WHERE <...>)+1,1));
但这要求你在某处有一个柜台。
答案 1 :(得分:0)
这个问题可以通过对表中id
的少量操作来解决。
仅比较ID的前缀以了解最后一个人所属的月份,例如2016-09-id
仅将2016-09-
与当前日期进行比较
如果月份或年份没有改变,那么我们只通过比较人的身份并将其增加1并与日期连接来找到最大身份
否则我们将日期与1
以下是表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;