|
|
|
| Здравствуйте.
Строим небольшую социальную сеть. У каждого пользователя должна быть страничка с адресом как "В контакте" 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;
}
}
?>
|
| |
|
|
|
|
|
|
|
для: antf
(01.05.2010 в 22:02)
| | Неольшое уточнение.
С чем связан выбор типа этого идентифицирующего субъекта поля, как целого?
Пользовательский уникальный ключ обычно делают типа varchar и традиционно называют словом login.
И таки дают обычно выбирать самому субъекту.
И даже в таком аспекте обычно не делают его модифицируемым по схеме. Разве что руками админа подкрутить, если приспичит, за отдельное количество денег борзых щенков. | |
|
|
|
|
|
|
|
для: Trianon
(01.05.2010 в 22:24)
| | >С чем связан выбор типа этого идентифицирующего субъекта поля, как целого?
1. С тем что на сайте В контакте - это так.
2. Некоторые люди должны иметь номера 1-20. Самые главные на сайте, в общем.
3. Есть люди, у которых номер зависит от региона (тел. код) | |
|
|
|
|
|
|
|
для: antf
(01.05.2010 в 22:40)
| | >>С чем связан выбор типа этого идентифицирующего субъекта поля, как целого?
>
>1. С тем что на сайте В контакте - это так.
Да. Но там это поле не модифицируется хоть тресни. И вполне вероятно является первичным ключом. Так что этот довод мимо кассы.
>2. Некоторые люди должны иметь номера 1-20. Первый номер - не пустое слово.
так и пафосных логинов тоже можно нарегистрировать заранее :)
$1, $2, $20.
>3. Есть люди, у которых номер зависит от региона (тел. код)
Вот этот момент не понял. Поясните? | |
|
|
|
|
|
|
|
для: Trianon
(01.05.2010 в 22:53)
| | >>3. Есть люди, у которых номер зависит от региона (тел. код)
>>Вот этот момент не понял. Поясните?
1 человек из Москвы будет иметь номер - 000495, из Питера - 000812. Может, конечно, не один, короче, некоторым код региона нужно вставить в url личной страницы. | |
|
|
|
|
|
|
|
для: Trianon
(01.05.2010 в 22:53)
| | >так и пафосных логинов тоже можно нарегистрировать заранее :)
>$1, $2, $20.
Там социальная сеть только для одной профессиональной группы людей. | |
|
|
|
|
|
|
|
для: Trianon
(01.05.2010 в 22:53)
| | >>>С чем связан выбор типа этого идентифицирующего субъекта поля, как целого?
>>
>>1. С тем что на сайте В контакте - это так.
>Да. Но там это поле не модифицируется хоть тресни. И вполне вероятно является первичным >ключом. Так что этот довод мимо кассы.
Это здесь на форуме он мимо кассы :) Мне самому такая возможность не нравится. Но заказчику нужно, чтобы ссылка на страничку пользователя имела вид http://site.ru/id123456. Выделенный номер должен генериться автоматически, для определенной категории пользователей его можно назначать. Вот я и спросил, как это лучше сделать? | |
|
|
|
|
|
|
|
для: 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
|
Такой ответ Вы ждете? | |
|
|
|
|
|
|
|
для: Trianon
(02.05.2010 в 00:48)
| | Да, спасибо. Мне бы в голову не пришло. Похожий пример, когда таблица объединяется сама с собой, из Самоучителя помню, но что-то он до меня не дошел. | |
|
|
|