我正在使用下面的函数创建一个以字母为前缀的唯一字段。 如果用于与许多用户进行交易,这会导致任何问题吗? 方案是在循环内调用此函数,如果有许多用户同时使用该系统。这会导致任何错误吗?有更好的方法吗?我使用GLAccountID作为其他表的外键。
function getID(){
global $db;
$max_gl = $db->get_var("SELECT MAX(GLAccountNumber) FROM sys_glaccount");
if($max_gl == null){
$max_gl = 1;
}else if($max_gl > 0){
$max_gl = $max_gl + 1;
}
return 'GLA'.$max_gl;
}
该表看起来像这样,GLAccountNumber是主键,我将其设置为自动增量。
答案 0 :(得分:2)
有办法做到这一点,但你不应该这样做。认真。这是沉重而危险的,开发人员会在晚上哭泣。
请考虑使用accountNumber,只需在检索时添加GLA即可?通过这种方式,您可以获得auto-id的简单,快速和正确,并且可以在需要时对其进行优化。
另一种选择是使它成为一个组合键,你的前缀在一列中,而数字在自动增量中,虽然我不明白为什么你应该想要它。
最后,如果您只是添加三个字母,则无需在同一字段中实际执行此操作:)
答案 1 :(得分:1)
您实际上可以在没有新行的情况下以您想要的格式获取帐户ID:
SELECT CONCAT('GL',GLAccountNumber) AS GLaccountID FROM `sys_glaccount`
而不是仅仅引用一个全新的列......
或者,如果您的目的是避免与相同字段混淆,则可以使用
SELECT g.GLAccountNumber FROM `sys_glaccount` g INNER JOIN `sys_glaccount2` g2 ON g2.GLAccountNumber=g.GLAccountNumber
如果没有唯一字段名称,查询就会混淆