Выбор случайного значения, не совпадающего с ключом
MySQL. Есть таблица members, в ней есть поле key - случайное девятизначное число. Требуется создать новый key, не совпадающий ни с одним из существующих. Как будет выглядеть запрос? select 100000000+floor(rand()*900000000) as new_key, а дальше?
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
может GUID использовать?
а нафига было городить случайное число в ключ?
а нафига было городить случайное число в ключ?

`id` mediumint(8) unsigned NOT NULL auto_increment,
Дальше просто инсерт..
Дальше просто инсерт..
[syntax=Delphi] [/syntax]
Если оставить в стороне вопрос о целесообразности получения значений pk с помощью генератора случайных чисел, то задачку можно решить так.
Скажу сразу, что не надо искать хорошее решение этой задачки в одном select'e. Для поиска значения ключа проще использовать цикл.
select min( v.new_key)
from members
, (
select round( dbms_random.value( 1, 1000) as new_key
from members
where rownum < 20
) v
where members.key != v.new_key
Этот запрос для оракл.
Константа 20 должна быть замена другим значением. Либо её надо подобрать экспериментальным путем, либо рассчитать используя знания теорвера
, либо тупо брать 18% от количества свободных значений из диапазона значений для колонки key, но не более чем количество строк в таблице members.
Скажу сразу, что не надо искать хорошее решение этой задачки в одном select'e. Для поиска значения ключа проще использовать цикл.
select min( v.new_key)
from members
, (
select round( dbms_random.value( 1, 1000) as new_key
from members
where rownum < 20
) v
where members.key != v.new_key
Этот запрос для оракл.
Константа 20 должна быть замена другим значением. Либо её надо подобрать экспериментальным путем, либо рассчитать используя знания теорвера

Садись 2, это тупо незнание работы баз данных..
[syntax=Delphi] [/syntax]
Это о чём?Duncon писал(а):Садись 2, это тупо незнание работы баз данных..
Видимо, придется обходиться средствами php
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
auto_incrementНе полентесь найдите описание - оба..
[syntax=Delphi] [/syntax]
А песня вовсе не о том, а о любви...Duncon писал(а):auto_incrementНе полентесь найдите описание - оба..

ТС спрашивал как написать sql, а не о том, как лучше создавать Pk
Это нужно когда импортируешь чужые данные или сливаешь несколько наборов в один. При проведении нагрузочных тестов для генерации данных; настройке производительности.Игорь Акопян писал(а):а нафига было городить случайное число в ключ?
Это быдлорешение.. Переубеждать не буду..
[syntax=Delphi] [/syntax]