增加重复条目的 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 循环来检查下一个数字。这不是性能问题,因为您只会在保存新记录时使用它。

  1. 在循环之前,创建计数器(初始为 0)。
  2. 在循环中 - 如果计数器 > 0,将数字添加到 url
  3. 的末尾
  4. 增加计数器
  5. 检查 url 是否存在于数据库中(当来自 db 的结果 > 0 时)

与其尝试创建一个复杂的过程来保持正确的名称,不如添加分隔字段 version

然后 UI proporse 只需连接两者

 SELECT CONCAT(post , '-', version)