функция для генерации имен для незарегистрированных пользователей - PullRequest
2 голосов
/ 27 июня 2010

Как создать или какова логика функции, которая генерирует имена для незарегистрированных пользователей, используя данное имя в качестве строковой переменной, используя sql 2005 (например, регистрация в hotmail, Yahoo)

1 Ответ

0 голосов
/ 27 июня 2010

Вы пытаетесь сгенерировать уникальное имя пользователя для записи 'user', учитывая его настоящее имя?Или адрес электронной почты?Это так, чтобы их можно было отслеживать / хранить в SQL Server (ваш вопрос не очень понятен)?Обычной вещью было бы не создавать для них имя пользователя (это одно из преимуществ, которое вы можете использовать, чтобы побудить пользователя зарегистрироваться, у него есть собственное имя пользователя).

Вместо этого вы можете использовать сам адрес электронной почтыв качестве первичного ключа, который в любом случае всегда будет уникальным: поле имени пользователя будет иметь значение NULL (разрешить NULL) и содержать данные только в том случае, если пользователь зарегистрировался и выбрал имя.

Если вы хотите отобразитьимя пользователя или его адрес электронной почты, если у них нет имени пользователя, вы можете использовать COALESCE или ISNULL, например SELECT ISNULL(username, email_address) - который дает значение «username», если оно не равно нулю, и в этом случае он дает значение'email_address'.

Надеюсь, что это поможет - возможно, не тот вопрос, который вы задавали, но если бы вы могли перефразировать или уточнить, мы будем рады помочь вам в дальнейшем.


В качестве альтернативы я читаюВаш вопрос еще раз: вы пытаетесь предложить доступные имена пользователей?Например, если они введут:

Имя: Kieren Фамилия: Johnstone

Затем вы хотите предложить KierenJohnstone, KierenJohnstone1, JohnstoneK, KJohnstone и т. Д.?(если они доступны, то есть).

Если это так, вы должны написать метод, который генерирует возможности, например:

public IEnumerable<string> GeneratePossibleBaseUsernames(string firstname, string lastname)
{
    yield return firstname + lastname; // eg KierenJohnstone
    yield return lastname + firstname; // eg JohnstoneKieren
    yield return firstname.Substring(0,1) + lastname; // eg KJohnstone
    yield return lastname + firstname.Substring(0,1); // eg JohnstoneK
    yield return firstname + lastname.Substring(0,1); // eg KierenJ
}

Затем вы увидите, если этидоступны в базе данных:

public List<string> GetAvailablePossibleUsernames(string firstname, string lastname)
{
    List<string> availablePossibilities = new List<string>();

    foreach (string possible in GeneratePossibleBaseUsernames(firstname, lastname))
    {
        if (IsAvailable(possible))
        {
            availablePossibilities.Add(possible);
            continue;
        }
        for (int i = 1; i < 100; i++)
        {
            string postfixedTest = possible + i.ToString();
            if (IsAvailable(postfixedTest))
            {
                availablePossibilities.Add(postfixedTest);
                break;
            }
        }
    }
    return availablePossibilities;
}

Вам необходимо написать метод IsAvailable (), чтобы взять строку в качестве параметра и вернуть bool - 'true', если имя пользователя еще не существует вбазы данных.

Этот метод возвращает список строковых объектов с предложениями: он будет проверять результаты из GeneratePossibleBaseUsernames, а если один из них недоступен, он будет пробовать его с номерами от 1 до 99 посленапример, если был взят KierenJohnstone, он бы предложил KierenJohnstone1.

Вы также можете реализовать все это в хранимой процедуре SQL.Вы определенно захотите проверить, доступно ли имя, когда вы вставляете / обновляете запись, или поместите уникальный индекс в таблицу имен пользователей, чтобы остановить дублирование - в случае, если два человека используют одно и то же имя в одно и то же время!

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...