인보이스에 고유 ID를 만들어야합니다. 각 인보이스 ID는 & 달의 인보이스 및 1부터 시작하는 증분 숫자로 구성된 year-month-number
양식입니다 (간격은 허용되지 않음). 우리 월 2017 년 4 송장이있는 경우 PHP & MySQL : 고유 한 '년 - 월 - 숫자'키를 만드는 방법은 무엇입니까?
2017-1-1
2017-1-2
2017-1-3
2017-1-4
지금 나는이 고유 ID의를 생성하는 응용 프로그램을 만들려고합니다. 특히 2 명의 사람이 동일한 시간에 인보이스 번호를 요청할 때도 다른 ID를 가져야합니다.
나는 이노를 사용하고 난 다음 표
송장는 year-month
쌍에 대해 생성되지 않은 경우 책
year | month | number |
------------------------
2017 | 7 | 2 |
2017 | 6 | 5 |
2017 | 5 | 6 |
는 다음 엔트리가 데이터베이스에 없습니다 있습니다. 기본 키는 year-month
쌍이며 number
은 auto increment index
입니다. 그 auto increment column
및 LAST_INSERT_ID(number+1)
다른 사용자에 의해 어쩌면 또한 (마지막으로 삽입 된 number
을 증가하기 때문에 열 번호를 반환 $db->insert_id;
:
$stmt = $db->prepare('INSERT INTO book(year,month,number)
VALUES (?,?,1)
ON DUPLICATE KEY UPDATE number= LAST_INSERT_ID(number+1)');
$stmt->bind_param('ii', $year, $month);
$stmt->execute();
echo 'Next invoice id: ' . $year . '-' . $month . - . $db->insert_id;
설명 :
내가이 같은 다음 송장 ID를 계산하는 것입니다 가정 ? 나는 그것에 대해 확실하지 않고 문서에서 이것을 찾는 데 문제가있다 http://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_last-insert-id)사람들이이 코드를 동시에 실행하면이 코드가 실제로 작동할까요 아니면 여러 개의 동일한 ID를 만들 수 있습니까?
편집 현재 월/년의 수를 가정하는 이유는 두 쿼리가 동시에 6 숫자 5를 업그레이드 할 수 있도록 2 명, 같은 시간에 청구서를 계산한다는 것이 불가능하다 5. 입니다 ? 이 경우 청구서 ID '2017-11-6'을 모두 받게됩니까?
는 당신이를 필요는 없습니다 AI 컬럼? 그렇지 않으면 자동으로 모든 레코드를 고유하게 만듭니다. –
@ Fred-ii-'number' 필드는'AI' 칼럼이지만, 업데이트 할 때 증가시킵니다. – Adam
AI를 증가 시켜서는 안되며, AI 자체가 증가합니다. 나는 당신이 여기서 무엇을하고 싶은지를 완전히 파악하지 못하고 있다고 느낍니다. mysqli_error ($ db)를 질의에 추가하고 그 결과를 볼 수 있습니까? –