2016-12-13 2 views
0

je sais que le type varchar de colonnes ne sont pas incrémenté, mais je veux faire quelque chose comme ceci:valeurs d'incrément varchar sur entrée en double

Lorsqu'une valeur dupliquée est insérée, le nouveau sera étiqueté avec un numéro à la fin.

Par exemple, nous avons un post-nom sur notre colonne dans la base de données. Un autre post-nom de valeur est entré, donc le suivant sera post-name-2, suivi de post-name-3.

J'ai programmé quelque chose en PHP mais ce n'est pas très pratique.

 $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"; 


     } 
+1

Au niveau db je pense qu'il vaut mieux créer un champ séparé pour cela. Autrement, vous ne pouvez pas comparer 'post-1' avec' post-2', et si vous avez besoin de faire une concaténation pour l'interface utilisateur, faites-le sur le 'SELECT' –

+0

@JuanCarlosOropeza donc il n'y a aucun moyen que je peux mettre en place sur db niveau ? –

+0

@JuanCarlosOropeza après avoir réfléchi un peu plus, ce que vous suggérez est que je crée un autre champ comme: duplicated_version. Et ce champ va contenir le nombre de cette URL particulière autant de fois qu'il est entré après sa création. Comme un compteur, merci cela résout le mieux. –

Répondre

1

Au lieu d'essayer de créer un processus compliquer pour garder le nom correct, il suffit d'ajouter champ séparé version

Ensuite pour l'interface utilisateur proporse juste concaténer les deux

SELECT CONCAT(post , '-', version) 
+0

Merci Juan, ça résout vraiment le mieux. –

0

Vous pouvez utiliser do ... while loop pour vérifier les numéros suivants. Ce n'est pas un problème de performance, car vous ne l'utiliserez que sur un nouveau disque.

  1. Avant la boucle, créez un compteur (initial par 0).
  2. En boucle - si le compteur> 0, ajouter le numéro à la fin de l'URL
  3. Augmenter compteur
  4. Vérifiez si l'URL existe dans la base de données (alors que les résultats de db> 0)
+0

Je vous comprends, j'espérais trouver quelque chose de plus au niveau db, mais je suppose qu'il n'y a aucun moyen de le faire. –