Увеличьте значения varchar при дублировании записи

Я знаю, что столбцы типа 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";}

0

Решение

Вместо того, чтобы пытаться создать сложный процесс, чтобы сохранить правильное имя, просто добавьте отдельное поле version

Тогда для пользовательского интерфейса просто объединить оба

 SELECT CONCAT(post , '-', version)
1

Другие решения

Вы можете использовать цикл do … while для проверки следующих чисел. Это не проблема производительности, потому что вы будете использовать это только для сохранения новой записи.

  1. Перед циклом создайте счетчик (начальный с 0).
  2. В цикле — если счетчик> 0, добавить число в конец URL
  3. Увеличить счетчик
  4. Проверьте, существует ли url в базе данных (пока результат db> 0)
0

По вопросам рекламы [email protected]