我知道varchar类型的列不可递增,但我想做这样的事情:
当插入重复的值时,新的值将在末尾用数字标记。
例如,我们在数据库中的列上有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";
}
答案 0 :(得分:1)
不要尝试创建复杂的流程以保持正确的名称,只需添加分隔的字段version
然后,对于UI的推荐,只需将两者连接起来
SELECT CONCAT(post , '-', version)
答案 1 :(得分:0)
您可以使用do ... while循环来检查下一个数字。这不是性能问题,因为你只会在保存新记录时使用它。