【问题标题】:PHP & MySQL : query if data exist and create if it not existPHP & MySQL:查询数据是否存在,如果不存在则创建
【发布时间】:2015-10-20 04:53:32
【问题描述】:

我有一个主键列,包含 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;
}

如果我的问题不清楚,请询问

【问题讨论】:

  • 如果不存在则插入stackoverflow.com/questions/1361340/…
  • 为什么不让id自动递增呢?您的其他数据应该在单独的列中,以后很难使用这些数据。
  • @chris85 你的意思是自增index_number吗?不幸的是我需要使用以前的程序员数据库
  • 可以在现有数据库中添加表吗?
  • 我会退后一步,撤消(分离数据)之前开发人员所做的错误工作。

标签: php mysql sql


【解决方案1】:

如果您需要使用现有的数据库,您可以确保像这样的唯一 ID...

  1. 创建一个包含两个字段的表...

    $createSQL1 = $conn->prepare("如果不存在则创建表nxtnum ( id int(11) NOT NULL AUTO_INCREMENT, nxtnum int(11) 非空, 主键 (id) ) ENGINE=InnoDB 默认字符集=latin1");

    $createSQL1->execute();

    $insertSQL1 = $conn->prepare("INSERT INTO nxtnum (id, nxtnum) VALUES (1, 501)");

    $insertSQL1->执行();

其中“501”是所有现有 ID 中最高的第一部分加 1

  1. 获取这行代码的编号...$id_num = 123;...

    $sql = "SELECT * FROM nxtnum"; $query = $conn->prepare($sql); $查询->执行(); $row = $query->fetch(PDO::FETCH_ASSOC);

$conn 是你的数据库连接文件

  1. 创建新的唯一 ID...

    公共函数 gen_id($id_type = "HL.BY") { $id_num = $row['nxtnum']; // 这是新的递增数字(在第 4 步中递增) $month = $this->romanic_number(date("n")); $year = substr(date("Y"),-2); $index_number = sprintf("%04d", $id_num);

    $id = $index_number 。 “/”。 $id_type 。 “/”。 $月。 “/”。 $年; 返回$id; }

  2. 增加你的计数器...

    $num = $row['nxtnum'] + 1; $sql = "更新 nxtnum 设置 nxtnum=:num"; $stmt = $conn->prepare($sql); $stmt->bindValue(':num', $num, PDO::PARAM_INT); $stmt->执行();

现在您已准备好使用下一个 ID,您的 ID 将始终是唯一的

注意:当然第一步只需执行一次。

【讨论】:

    猜你喜欢
    • 2011-05-16
    • 2012-08-19
    • 1970-01-01
    • 2017-11-09
    • 2016-11-05
    • 1970-01-01
    • 2017-03-13
    • 2014-07-23
    • 2011-05-12
    相关资源
    最近更新 更多