如果不追加,则检查名称是唯一的

时间:2010-05-24 07:10:12

标签: php unique increment identifier

我的应用程序要求用户输入他们的商家名称,应用程序将自动创建该名称以在URL中使用唯一标识符,即

“Bob's Cafe”将成为“bobs-cafe”

但是如果有重复的名字,我希望应用程序添加一个数字,所以如果已经有“bobs-cafe”,我们将使用“bobs-cafe-1”,如果已经有“bobs-cafe” -1“我们将使用”bobs-cafe-2“

我曾经使用过爆炸,还看过正则表达式,但我不知道解决这个问题的最佳方法。

我坚持能够抓住数字并递增它并返回字符串

3 个答案:

答案 0 :(得分:4)

添加Sarfraz的答案,您可能希望使用LIKE语句找到它

SELECT `urlIdentifier` FROM `businesses` WHERE `urlIdentifier` LIKE `bobs-cafe%`

将获得所有bobs-cafe项目 - 这样,如果你得到5行,你知道你有

bobs-cafe
bobs-cafe-1
bobs-cafe-2
bobs-cafe-3
bobs-cafe-4

并且您需要添加bobs-cafe-5

编辑 - 或者这个:

SELECT count(*)  as `howMany` FROM `businesses` WHERE `urlIdentifier` LIKE `bobs-cafe%`

现在您的结果对象(或数组)将具有总数:

echo $ resultObject-> howMany; //找到bobs-cafe sql的数量

答案 1 :(得分:2)

为什么不在URL中为每个标识符添加自动增量编号?
就像SO一样:

stackoverflow.com/questions/的 2895334 / PHP-应用检查-名称是唯一的,如果 - 不追加

因此,您有唯一标识符和商家名称。

这更好,因为他们可以自由更改商家名称,而无需更改标识符。

至于你的问题,这很简单。仅适用于PHP实践:

if (/* you've found the name is already non unique and have the max one in the $id */) {
  $parts = explode("-",$id);
  if (isset($parts[1])) $newid = $parts[0]."-".($parts[1]+1);
  else $newid = $parts[0]."-1";
}

答案 2 :(得分:1)

假设$user已经采用bobs-cafe

形式
function username_exists ( $user ) {

      $result = mysql_query("SELECT name FROM table WHERE $name LIKE '$user%' ");
      $count = mysql_num_rows($result);

        if ( $result ) {

            $num = $count+1;
            return username_exists ( $user.'-'.$num ) ;

        } else {

            return $user;
        }

}