我有一个主键列,其中包含id,因此它必须是唯一的

内容看起来像这样

php - PHP和MySQL:查询数据是否存在,如果不存在则创建-LMLPHP

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/

10-11 03:20
查看更多