PHP& MySQL:查询数据是否存在,如果不存在则创建

时间:2015-10-20 04:53:32

标签: php mysql sql

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

内容看起来像这样

enter image description here

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;
}

如果我的问题不明确,请询问

1 个答案:

答案 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将始终是唯一的

快乐的编码!

注意:当然,第一步只需要完成一次。