增加重复条目的 varchar 值
Increment varchar values on duplicate entry
我知道 varchar 类型的列不可递增,但我想做这样的事情:
插入重复值时,新值将在末尾标记一个数字。
例如,我们在数据库中的列上有 post-name。输入了另一个值 post-name,因此下一个将是 post-name-2
,然后是 post-name-3
。
我已经在php中编写了一些东西,但不是很方便。
$post_url_ = $post_url." %";
$stmt_check1 = $this->conn->prepare("SELECT * FROM post WHERE post_url LIKE :post_url ");
$stmt_check2 = $this->conn->prepare("SELECT * FROM post WHERE post_url = :post_url ");
$stmt_check1->bindparam(":post_url",$post_url_);
$stmt_check2->bindparam(":post_url",$post_url);
$stmt_check1->execute();
$stmt_check2->execute();
$rows1 = $stmt_check1->rowCount();
$rows2 = $stmt_check2->rowCount();
if($rows1<=0 && $rows2==1) {
$repeat_no = $rows1+1;
$post_url = $post_url."-$repeat_no";
}
if($rows1>0){
$repeat_no = $rows1+1;
$post_url = $post_url."-$repeat_no";
}
您可以使用 do...while 循环来检查下一个数字。这不是性能问题,因为您只会在保存新记录时使用它。
- 在循环之前,创建计数器(初始为 0)。
- 在循环中 - 如果计数器 > 0,将数字添加到 url
的末尾
- 增加计数器
- 检查 url 是否存在于数据库中(当来自 db 的结果 > 0 时)
与其尝试创建一个复杂的过程来保持正确的名称,不如添加分隔字段 version
然后 UI proporse 只需连接两者
SELECT CONCAT(post , '-', version)
我知道 varchar 类型的列不可递增,但我想做这样的事情:
插入重复值时,新值将在末尾标记一个数字。
例如,我们在数据库中的列上有 post-name。输入了另一个值 post-name,因此下一个将是 post-name-2
,然后是 post-name-3
。
我已经在php中编写了一些东西,但不是很方便。
$post_url_ = $post_url." %";
$stmt_check1 = $this->conn->prepare("SELECT * FROM post WHERE post_url LIKE :post_url ");
$stmt_check2 = $this->conn->prepare("SELECT * FROM post WHERE post_url = :post_url ");
$stmt_check1->bindparam(":post_url",$post_url_);
$stmt_check2->bindparam(":post_url",$post_url);
$stmt_check1->execute();
$stmt_check2->execute();
$rows1 = $stmt_check1->rowCount();
$rows2 = $stmt_check2->rowCount();
if($rows1<=0 && $rows2==1) {
$repeat_no = $rows1+1;
$post_url = $post_url."-$repeat_no";
}
if($rows1>0){
$repeat_no = $rows1+1;
$post_url = $post_url."-$repeat_no";
}
您可以使用 do...while 循环来检查下一个数字。这不是性能问题,因为您只会在保存新记录时使用它。
- 在循环之前,创建计数器(初始为 0)。
- 在循环中 - 如果计数器 > 0,将数字添加到 url 的末尾
- 增加计数器
- 检查 url 是否存在于数据库中(当来自 db 的结果 > 0 时)
与其尝试创建一个复杂的过程来保持正确的名称,不如添加分隔字段 version
然后 UI proporse 只需连接两者
SELECT CONCAT(post , '-', version)