我有一个主键列,包含 id ,因此它必须是唯一的
内容看起来像这样
ID 的格式为<index>/<division>/<month in roman>/<last 2 digit of year>
我的问题是检查 id 是否已存在的最佳查询, 并使用
创建ID<index>+1/<division>/<month in roman>/<last 2 digit of year>
这是我生成id的函数
public function gen_id($id_type = "HL.BY") {
$id_num = 123;
$month = $this->romanic_number(date("n"));
$year = substr(date("Y"),-2);
$index_number = sprintf("%04d", $id_num);
$id = $index_number . "/" . $id_type . "/" . $month . "/" . $year;
return $id;
}
如果我的问题不明确,请询问
答案 0 :(得分:0)
如果您需要使用现有数据库,您可以确保这样的唯一ID ...
1)创建一个包含两个字段的表...
$createSQL1 = $conn->prepare("CREATE TABLE IF NOT EXISTS `nxtnum` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nxtnum` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1");
$createSQL1->execute();
$insertSQL1 = $conn->prepare("INSERT INTO `nxtnum` (`id`, `nxtnum`) VALUES (1, 501)");
$insertSQL1->execute();
&#34; 501&#34;是所有现有ID的最高的第一部分加上1
2)获取此代码行的编号... $id_num = 123;
...
$sql = "SELECT * FROM nxtnum";
$query = $conn->prepare($sql);
$query->execute();
$row = $query->fetch(PDO::FETCH_ASSOC);
其中$conn
是您的数据库连接文件
3)创建新的唯一ID ...
public function gen_id($id_type = "HL.BY") {
$id_num = $row['nxtnum']; // this is the new incremented number (incremented in step 4)
$month = $this->romanic_number(date("n"));
$year = substr(date("Y"),-2);
$index_number = sprintf("%04d", $id_num);
$id = $index_number . "/" . $id_type . "/" . $month . "/" . $year;
return $id;
}
4)递增你的柜台......
$num = $row['nxtnum'] + 1;
$sql = "UPDATE nxtnum SET nxtnum=:num";
$stmt = $conn->prepare($sql);
$stmt->bindValue(':num', $num, PDO::PARAM_INT);
$stmt->execute();
现在您已准备好接收下一个ID,并且您的ID将始终是唯一的
快乐的编码!
注意:当然,第一步只需要完成一次。