我有一个主键列,其中包含id,因此它必须是唯一的
内容看起来像这样
id的格式为<index>/<division>/<month in roman>/<last 2 digit of year>
我的问题是,最好的查询来检查id是否已经存在,
并使用<index>+1/<division>/<month in roman>/<last 2 digit of year>
创建ID
这是我生成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;
}
如果我的问题不清楚,请询问
最佳答案
如果需要使用现有数据库,则可以确保这样的唯一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();
其中“ 501”是所有现有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将始终是唯一的
快乐编码!
注意:当然,第一步仅需执行一次。
关于php - PHP和MySQL:查询数据是否存在,如果不存在则创建,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33228268/