![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
AztEK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 723 Регистрация: 4.1.2005 Репутация: нет Всего: 18 |
Мне нужно рализовать следующее: таблица, у каждой записи которой первичным ключом является число от 1000 до 9999. При вставке новой записи, её ключ должен вычисляться случайным образом. Первый пришедший мне в голову запрос
понятное дело, не работает — иногда ключи дублируется и возникает ошибка. Проверять на уровне PHP свободный ключ мне кажется слишком долго, особенно при большом количестве записей. Подскажите, как можно сделать лучше? -------------------- Linux is like wigwam -- no windows, no gates, apache inside. |
|||
|
||||
SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 6 Всего: 401 |
Требование совершенно абсурдное. Первичный ключ - на то и первичный, чтобы быть удобным в первую очередь для самой базы, поэтому чаще всего и используется автоинкрементное поле (уникальное по определению). Для чего вообще это случайное число понадобилось? Не проще ли вносить случайность при выборке (order by rand() и т.д.)? -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
AztEK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 723 Регистрация: 4.1.2005 Репутация: нет Всего: 18 |
Делаю доску объявлений. Хочется, чтобы номер только что добавленного объявления не отображал количества уже добавленных. Создаётся иллюзия, что объявлений на сайте больше, чем на самом деле. Такое есть во многих сервисах. Может быть, делать это на уровне БД — не лучшее решение, но другого я пока не могу придумать. P.S. Если я неправильно использую понятие «первичный ключ» — извините. Имеется в виду некий идентификатор объявления. -------------------- Linux is like wigwam -- no windows, no gates, apache inside. |
|||
|
||||
SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 6 Всего: 401 |
AztEK, а просто начать автоинкремент с 1000 или 1234 (auto_increment=… при создании таблицы) не выход?
-------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
AztEK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 723 Регистрация: 4.1.2005 Репутация: нет Всего: 18 |
Немного не то, но в принципе на крайняк — выход. Да и из принципа охота разобраться ![]() Это сообщение отредактировал(а) AztEK - 15.3.2008, 22:04 -------------------- Linux is like wigwam -- no windows, no gates, apache inside. |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
AztEK, через триггеры можно сделать.
только такой первичный ключ - в топку. замедляет добавление, никак не ускорит(а в сравнении с "обычным"автоинкрементным вариантом - существенно замедлит) выборку, особенно - из нескольких связанных таблиц... да и от кого ты хочешь "прятать" идентификатор записи? от php-скрипта? если от человека, то пусть PHP-скрипт возвращает не id, а id * id + id. или вообще - md5(id). или ещё как. зачем пихать случайно генерируемые данные в БД - не понимаю. пусть идентификатор будет вычисляемым... хотя, способ, предложенный SelenIT'ом намного проще и с тем же эффектом... |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MySQL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |