如何解决从数据库 mySQL PHP
当我通过 PHP 将数据插入到我的数据库时,我正在尝试生成交易编号。 我想生成序列事务 id,以便我执行以下 SQL。 我正在计算 ID 列并为新插入添加 +1 值。 但是当我进行批量插入时,它不会在单个条目后显示不同的事务 ID。
我希望 ALFABHETs
始终保持不变,并且在数字之后会不断运行。
如果到了那个号码,它会自动变成3到4位数字。
例如,编号将从 MG001 开始。如果是 MG999 那么它会变成 MG1000、MG1001、MG1002 等
#table_name: table1
ID | transactionID
------------------
1 | MG001
2 | MG001
3 | MG003
4 | MG004
5 | MG004
6 | MG001
$stmt = $con->prepare("SELECT * FROM `table1` ORDER BY `ID` DESC LIMIT 1");
$stmt->execute();
if ($stmt->rowCount() > 0) {
while ($data = $stmt->fetch()) {
$transactionCode = 'MG' . $data['ID'] + 1;
}
} else {
$transactionCode = 'MG001' . '1';
}
解决方法
您的查询加载具有最高 ID 的记录,这是一条记录,如果找到则加 1。如果没有记录,则使用 'MG0011'
作为值。由于您只有一个值,如果您将其放入批量插入的代码中,那么它将被复制。因此,您应该加载 transactionID(而不是 ID),从中去除 MG 或任何前缀并为其添加 1。示例:
$stmt = $con->prepare("SELECT * FROM `table1` ORDER BY `ID` DESC LIMIT 1");
$stmt->execute();
if ($stmt->rowCount() > 0) {
while ($data = $stmt->fetch()) {
$transactionCode = (int)substr($data['transactionID'],2) + 1;
}
} else {
$transactionCode = 1;
}
上面的代码生成了一个起点,并且(还)不关心您打算使用的格式。现在,让我们实现一个根据需要生成代码的函数:
function generateTransactionCode($input,$prefix = 'MG') {
while (strlen($input) < 3) $input = '0'.$input;
return $prefix.$input;
}
现在让我们生成一个批量插入命令(我假设您auto_increment
ID
):
$sql = 'insert into table1(transactionID) values';
$values = [];
for ($index = 0; $index < 5; $index++) { //we insert 5 values in this example
$values[]='('.generateTransactionCode($transactionCode + $index).')';
}
$sql .= implode(',',$values);
//Execute the insert
使用插入选择语句来做到这一点更加棘手。如果您需要这样做,则需要使用 row_number。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。