在重复条目上增加varchar值

时间:2016-12-13 15:42:43

标签: php mysql auto-increment varchar

我知道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";


        }   

2 个答案:

答案 0 :(得分:1)

不要尝试创建复杂的流程以保持正确的名称,只需添加分隔的字段version

然后,对于UI的推荐,只需将两者连接起来

 SELECT CONCAT(post , '-', version)

答案 1 :(得分:0)

您可以使用do ... while循环来检查下一个数字。这不是性能问题,因为你只会在保存新记录时使用它。

  1. 在循环之前,创建计数器(初始为0)。
  2. 在循环中 - 如果计数器&gt; 0,在网址末尾添加数字
  3. 增加计数器
  4. 检查数据库中是否存在url(而db&gt; 0的结果)