powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Получить случайное значение id
7 сообщений из 7, страница 1 из 1
Получить случайное значение id
    #38970794
skelmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Каким запросом получить случайное значение id (autoincrement) из таблицы и сохранить его в переменную(php) ? Т.е. чтоб в переменной было именно число. БД - Firebird. Спасибо.
...
Рейтинг: 0 / 0
Получить случайное значение id
    #38970816
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skelmen,

никаким. в sql нет понятия "случайная запись". Получить случайный номер уже сгенеренного id (и записанного в таблицу) можно только при следующих условиях:
- должна быть 100% уверенность, что в таблице есть записи с непрерывными id от n до m
- максимальный (m) id можно получить select max(id) from table, минимальный - min(id)
- получить random число в диапазоне от n до m
- выбрать запись с таким id из таблицы.
...
Рейтинг: 0 / 0
Получить случайное значение id
    #38970876
skelmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvskelmen,

никаким. в sql нет понятия "случайная запись". Получить случайный номер уже сгенеренного id (и записанного в таблицу) можно только при следующих условиях:
- должна быть 100% уверенность, что в таблице есть записи с непрерывными id от n до m
- максимальный (m) id можно получить select max(id) from table, минимальный - min(id)
- получить random число в диапазоне от n до m
- выбрать запись с таким id из таблицы.

Понял, хорошо. А если вернуть все значения id в виде массива, а потом выбрать из него случайное? Так можно?
...
Рейтинг: 0 / 0
Получить случайное значение id
    #38970886
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skelmenА если вернуть все значения id в виде массива, а потом выбрать из него случайное? Так можно?
можно, только у тебя php лопнет, если в этой таблице десятки или сотни тысяч записей. Они же в память php полезут.
...
Рейтинг: 0 / 0
Получить случайное значение id
    #38970915
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skelmen,

1) сколько примерно записей в таблице и, если много, то есть ли по полю id убывающий индекс ?
2) распределение значений id - сильно дырявое или нет ?
...
Рейтинг: 0 / 0
Получить случайное значение id
    #38971115
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
насколько велика таблица источник?

Если крохотная, в лоб как-то так:
select first 1 id from tbl order by rand()
или
select first 1 skip rand()*(select count(*) from tbl) id from tbl

для больше 1000 записей я бы не стал использовать столь дуболомную конструкцию.
...
Рейтинг: 0 / 0
Получить случайное значение id
    #38971181
MrCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вариант 1: Если поле (F) проиндексировано по возрастанию, и известны минимальное и максимальное значение, можно попробовать взять произвольное число (N) между min и max и потом SELECT FIRST 1 F ... WHERE F > N. Это быстрее skip random. Получится - да, случайное число, но нужно понимать, что из-за дырок в нумерации распределение будет не равномерным. Например, если SELECT F даёт 1, 2, 3, 4, 100500, то выпадать будут постоянно эти самые 100500.

Вариант 2: создать GTT (F, NO_HOLES_SIR), заполнять её заново перед каждой серией выборок, ручками обеспечивая бездырочность поля NO_HOLES_SIR, и уже на эти данные кастовать Вариант 1.

Ну и классика:
Код: plaintext
1.
2.
3.
int GetRandomNumber() {
  return 4; // оно правда случайное!
}
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Получить случайное значение id
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]