在mysql中根据年,月和我的自定义数字创建一个ID列

时间:2015-07-06 20:29:20

标签: php mysql

我只想在mysql中使用 150700001 150600001 (yymm00001)格式化的ID列,这也是primary key。我已经尝试过以下代码

 select ifnull(lpad(max(pid)+1,9, '0'), 
 concat(concat(DATE_FORMAT(CURDATE(), '%y'), 
 DATE_FORMAT(CURDATE(), '%m')),lpad('1',5,'0'))) pid 
 from patient_admission;

我想:

╔═══════════╗
║ 150600001 ║
║ 150600002 ║
║ 150600003 ║
║ 150700001 ║
║ 150600002 ║
╚═══════════╝

等等

但它下个月没有回来。 日Thnx。

2 个答案:

答案 0 :(得分:0)

这是我的表结构:

1.  pid {char(9), Primary Key}
2.  pname
3.  age
4.  gender
5.  marital_status
6.  profession
7.  father_name
8.  mother_name
9.  present_addr
10. permanent_addr
11. phone
12. contact_person_name
13. contact_person_phone
14. contact_person_relation
15. contact_person_addr
16. consultant_doctor
17. onduty_doctor
18. admission_fee
19. admission_date
20. bed_allotment
21. status

您提到的上述代码,已经过测试。

我在CodeIgniter上运行它:

模型部分:

public function get_patient_id(){
$sql = "select ifnull(lpad(max(pid)+1,9, '0'), concat(concat(DATE_FORMAT(CURDATE(), '%y'), DATE_FORMAT(CURDATE(), '%m')),lpad('1',5,'0'))) pid from patient_admission";

$qry = $this->db->query($sql);
$ra = $qry->result_array();
return $ra[0];
}

控制器部分:

public function entry(){
$data['patient_id'] = $this->Patient_admission_model->get_patient_id();
$this->load->view( 'patient/admission/entry', $data );

}

答案 1 :(得分:0)

最后我已成功完成,jaust必须添加子查询的线索:

select ifnull(lpad(max(pid)+1,9, '0'), concat(DATE_FORMAT(CURDATE(), '%y%m'),lpad('1',5,'0'))) pid from patient_admission where id_generator = (select DATE_FORMAT(CURDATE(), '%y%m') id_generator)
  

我刚刚在patient_admission表中创建了 id_generator 另一列   和gmdate(' ym',time()+ 3600 * 6);插入期间的此代码

全部。顺便说一句,多亏了你们所有人@Drew Pierce