2013-05-09 4 views
0

에 의한 증가는 사용자 이름과 같은, 내 데이터베이스에 삽입하면 . 최대 ....확인, 만약 그렇다면, 하나

  • john_smith를
  • John_Smith_1
  • John_Smith_2
  • John_Smith_3
  • : 그렇다면, 다음과 같은 사용자 이름이 이미 존재한다면

    John_Smith_1

    되기 위해 1을 증가 John_Smith_10

나는 넥스가 필요하다. t John_Smith가 John_Smith_11에 증가하도록 삽입되었습니다.

지금까지 내가 검색이 함께 올라와있다 :

$preferredname= "John_Smith" 

     //check for duplicate user names 
     $duplicate= check_for_duplicate_username($preferredname);      

     //if duplicate, increment the preferredname  
     if ($duplicate) 
     { 
      $parts = explode("_",$preferredname); 

      if (isset($parts[1])) 
      $preferredname = $parts[0]."_".$parts[1]."_".($parts[2]+1); 

      else $preferredname = $parts[0]."_".$parts[1]."_1"; 
     } 

이, 저는 믿습니다 첫 번째 일치하는 사용자 이름에 대해 작동합니다. 위의 행을 쿼리 할

$sql = 'SELECT * FROM users WHERE user_username LIKE ' . $name . '_%'; 

:

 function check_for_duplicate_username($name) 
{ 
    // check if username already exists 
    $sql = "SELECT * FROM users WHERE user_username=$name"; 
    //then return duplicates 
+0

여기에 XY 문제가 있습니다.ddls가 바뀌어야하고, 데이터베이스를 잘못 사용하고 있습니다. – gbtimmon

+1

웹 사이트가 그렇게 할 때 나는 그것을 싫어합니다. 이름이 찍혔다는 것을 사용자에게 말하고 다른 사람을 선택하게하십시오. – vascowhite

+0

빠른 생각 - 사용자와 함께 증가 된 값을 저장해야 해당 열로 정렬 할 수 있습니다. 또는 사용자 이름에 ID를 추가 할 수 있습니다. 또는 더 나은 아직 사용자 이름이 찍힌다는 것을 나타내는 "오류"를 반환하고 다른 이름을 선택하게하십시오. –

답변

0

이것은 사물의 거대한 계획에서 가장 좋은 해결책은 아니지만, 여기에 구체적으로 무엇을하려했는지 대답하는 답변이 있습니다. 다음 쿼리는 $ name 또는 $ name_123이있는 사용자 수를 반환합니다. SELECT COUNT(*) FROM users WHERE user_username REGEXP '$name[_0-9]*$'; 값이 0 인 경우 $name 만 사용하면됩니다. 그렇지 않으면 $name."_". + 쿼리에서 반환 한 숫자를 사용할 수 있습니다.

그러나 많은 사람들이 언급했듯이 사용자 이름을 자동으로 할당하는 것이 가장 좋습니다 (매우 웹 1.0 : P). 이메일 주소를 권하고 싶습니다. 또 다른 옵션은 소셜 앱이 사용하는 모든 사용자 ID (소셜 앱이 여러 개인 경우)를 식별하고 고유 한 기본 키로 자동 증가 ID 필드를 사용하는 것입니다.

+0

예. 이것이 최선의 방법이라고 생각합니다. 프로필에서 고유 한 항목을 지정하고 표시 이름 필드를 추가하여 UI에서 친숙한 것을 보여줍니다. 감사 – gray

1

당신은이 쿼리를 사용할 수 있습니다 내 문제가 가장 많은 이름의 버전에 대한 데이터베이스를 확인하고 있습니다 ... 이것은 내 SQL입니다 어떤 user_username이

당신이 사용자의 접미사 번호 점점이의 PHP 문을 사용할 수 있습니다 (나중에 확인해야 *이 번호를 포함한 모든 유효한 문자) John_Smith_ *와 유사한 값이 있습니다

preg_match('/([0-9]+)$/', 'John_smith_10', $matches); 
$user_number = $matches[0]; 
0

나는 비슷한 문제가 있습니다. 오늘 해결하려고 노력하고 있었고, 이것을 좋아했습니다. 내 경우에는 내가 먼저/초기 성 사용자에 따라 고유 한 디렉토리 이름/저장 만드는 데 필요한 :

$username = "bjones"; 
$usersql = "SELECT * FROM users WHERE username LIKE '$username%'"; 
$usercnt = mysqli_num_rows(mysqli_query($con,$usersql)); 

// If bjones, bjones1, bjones2, etc already exists 
if ($usercnt >= 1) { 
    $num = ++$usercnt;    // Increment $usercnt by 1 
    $username = $username . $num; // Add number to username 
} 

가정 BJONES, bjones1을 bjones2이 이미 존재, 나는 bjones3로 끝날 것입니다.

관련 문제