Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как назначить номер пользователю?
 
 автор: antf   (01.05.2010 в 22:02)   письмо автору
 
 

Здравствуйте.

Строим небольшую социальную сеть. У каждого пользователя должна быть страничка с адресом как "В контакте" http://mysite.com/id123456. Причем надо сделать так, чтобы ид можно было менять через админку. Я решил оказаться от использования ид пользователя как такового, поскольку ид служит для связки нескольких таблиц, и в случае его изменения, придется менять ид в других таблицах, что конечно же не дело. Я подумал, что для ссылки лучше использовать другой числовой столбец num (номер). Проблема в том, как назначать номер вручную. Допустим в таблице пользователей есть уже номера:
1, 2, 3, 10. Как сделать так, чтобы новый пользователь получил номер 4? Пока в голове только один простой, но ресурсоемкий вариант - в обработчик формы регистрации поместить:

<?php 
for($i 1$i 100001$i++)
{
  
$query "SELECT num FROM users WHERE num = $i";
  
$res   mysql_query;

  if(
mysql_num_rows($res) == 0)
  {
    
$num $i;
    break;
  }
}
?>

  Ответить  
 
 автор: Trianon   (01.05.2010 в 22:24)   письмо автору
 
   для: antf   (01.05.2010 в 22:02)
 

Неольшое уточнение.
С чем связан выбор типа этого идентифицирующего субъекта поля, как целого?

Пользовательский уникальный ключ обычно делают типа varchar и традиционно называют словом login.
И таки дают обычно выбирать самому субъекту.

И даже в таком аспекте обычно не делают его модифицируемым по схеме. Разве что руками админа подкрутить, если приспичит, за отдельное количество денег борзых щенков.

  Ответить  
 
 автор: antf   (01.05.2010 в 22:40)   письмо автору
 
   для: Trianon   (01.05.2010 в 22:24)
 

>С чем связан выбор типа этого идентифицирующего субъекта поля, как целого?

1. С тем что на сайте В контакте - это так.
2. Некоторые люди должны иметь номера 1-20. Самые главные на сайте, в общем.
3. Есть люди, у которых номер зависит от региона (тел. код)

  Ответить  
 
 автор: Trianon   (01.05.2010 в 22:53)   письмо автору
 
   для: antf   (01.05.2010 в 22:40)
 

>>С чем связан выбор типа этого идентифицирующего субъекта поля, как целого?
>
>1. С тем что на сайте В контакте - это так.

Да. Но там это поле не модифицируется хоть тресни. И вполне вероятно является первичным ключом. Так что этот довод мимо кассы.

>2. Некоторые люди должны иметь номера 1-20. Первый номер - не пустое слово.

так и пафосных логинов тоже можно нарегистрировать заранее :)
$1, $2, $20.

>3. Есть люди, у которых номер зависит от региона (тел. код)

Вот этот момент не понял. Поясните?

  Ответить  
 
 автор: antf   (01.05.2010 в 22:56)   письмо автору
 
   для: Trianon   (01.05.2010 в 22:53)
 

>>3. Есть люди, у которых номер зависит от региона (тел. код)

>>Вот этот момент не понял. Поясните?

1 человек из Москвы будет иметь номер - 000495, из Питера - 000812. Может, конечно, не один, короче, некоторым код региона нужно вставить в url личной страницы.

  Ответить  
 
 автор: antf   (01.05.2010 в 22:58)   письмо автору
 
   для: Trianon   (01.05.2010 в 22:53)
 

>так и пафосных логинов тоже можно нарегистрировать заранее :)
>$1, $2, $20.

Там социальная сеть только для одной профессиональной группы людей.

  Ответить  
 
 автор: antf   (01.05.2010 в 23:14)   письмо автору
 
   для: Trianon   (01.05.2010 в 22:53)
 

>>>С чем связан выбор типа этого идентифицирующего субъекта поля, как целого?
>>
>>1. С тем что на сайте В контакте - это так.

>Да. Но там это поле не модифицируется хоть тресни. И вполне вероятно является первичным >ключом. Так что этот довод мимо кассы.

Это здесь на форуме он мимо кассы :) Мне самому такая возможность не нравится. Но заказчику нужно, чтобы ссылка на страничку пользователя имела вид http://site.ru/id123456. Выделенный номер должен генериться автоматически, для определенной категории пользователей его можно назначать. Вот я и спросил, как это лучше сделать?

  Ответить  
 
 автор: Trianon   (02.05.2010 в 00:48)   письмо автору
 
   для: antf   (01.05.2010 в 23:14)
 

SELECT 1+MIN(a.num)
  FROM users a 
    LEFT JOIN users b ON b.num = a.num+1 
  WHERE b.num IS NULL

Такой ответ Вы ждете?

  Ответить  
 
 автор: antf   (02.05.2010 в 00:53)   письмо автору
 
   для: Trianon   (02.05.2010 в 00:48)
 

Да, спасибо. Мне бы в голову не пришло. Похожий пример, когда таблица объединяется сама с собой, из Самоучителя помню, но что-то он до меня не дошел.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования