1

私のアプリケーションでは、ユーザーが会社名を入力する必要があります。この名前は、URLで使用される一意の識別子に自動的に作成されます。

「Bob'sCafe」は「bobs-cafe」になります

ただし、名前が重複している場合は、アプリケーションに番号を追加してほしいので、すでに「bobs-cafe」がある場合は「bobs-cafe-1」を使用し、同様に「bobs-cafe-1」がすでにある場合は使用します。 「bobs-cafe-2」を使用します

explodeを使用し、正規表現も調べましたが、これにアプローチする最善の方法がわかりません。

数字を取得してインクリメントし、文字列を返すことができることに固執しています

4

3 に答える 3

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 の数

于 2010-05-24T07:19:10.130 に答える
2

URL のすべての識別子に自動インクリメント番号を追加しないのはなぜですか?
SOと同じように:

stackoverflow.com/questions/ 2895334 /php-application-check-name-is-unique-if-not-append

したがって、一意の識別子とビジネス名の両方があります。

識別子を変更せずにビジネス名を自由に変更できるため、これはさらに優れています。

あなたの質問に関しては、それは非常に簡単です。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";
}
于 2010-05-24T07:19:55.630 に答える
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;
        }

}
于 2010-05-24T07:50:58.387 に答える