首先,我很抱歉,如果以前曾经问过这个问题 - 事实上我确定它有,但我找不到它/找不到要搜索的东西.
我需要根据公司名称生成唯一的快速参考ID.例如:
Company Name Reference Smiths Joinery smit0001 Smith and Jones Consulting smit0002 Smithsons Carpets smit0003
这些都将存储在MySQL表的varchar列中.数据将被收集,转义和插入,如'HTML - > PHP - > MySQL'.ID应该是上面描述的格式,四个字母,然后是四个数字(最初至少 - 当我到达smit9999它时只会溢出到5个数字).
我可以处理从公司名称生成4个字母,我将直接通过名称,直到我收集了4个字母字符,strtolower()然后我 - 然后我需要获得下一个可用的数字.
最好/最简单的方法是什么,以便消除重复的可能性?
目前我在想:
$fourLetters = 'smit';
$query = "SELECT `company_ref`
FROM `companies`
WHERE
`company_ref` LIKE '$fourLetters%'
ORDER BY `company_ref` DESC
LIMIT 1";
$last = mysqli_fetch_assoc(mysqli_query($link, $query));
$newNum = ((int) ltrim(substr($last['company_ref'],4),'0')) + 1;
$newRef = $fourLetters.str_pad($newNum, 4, '0', STR_PAD_LEFT);
Run Code Online (Sandbox Code Playgroud)
但是,如果两个用户尝试输入同时导致相同ID的公司名称,我可以看到这会导致问题.我将在列上使用唯一索引,因此它不会导致数据库中出现重复,但仍会导致问题.
当我进行插入时,有没有人能想到让MySQL为我工作的方法,而不是事先在PHP中计算它?
请注意,实际代码将是OO并将处理错误等 - 我只是想知道是否有更好的方法来执行此特定任务,它更多的是关于SQL而不是其他任何东西.
编辑
我认为@ EmmanuelN建议使用MySQL触发器可能是解决这个问题的方法,但是: