我的应用程序要求用户输入他们的商家名称,应用程序将自动创建该名称以在URL中使用唯一标识符,即
“Bob's Cafe”将成为“bobs-cafe”
但是如果有重复的名字,我希望应用程序添加一个数字,所以如果已经有“bobs-cafe”,我们将使用“bobs-cafe-1”,如果已经有“bobs-cafe” -1“我们将使用”bobs-cafe-2“
我曾经使用过爆炸,还看过正则表达式,但我不知道解决这个问题的最佳方法。
我坚持能够抓住数字并递增它并返回字符串
答案 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;
}
}