HELP!!! Как из таблицы нужно выбрать 10 случайных записей. Для каждого есть уникальное поле ID, но там не по порядку числа."ORDER BY RAND() LIMIT" идет лесом.
>Как из таблицы нужно выбратьооооооомич, дорогой ты мой! сколько лет, сколько зим! У меня капча kley, пойдем поуёбываем! А как выглядит таблица?
>Как из таблицы нужно выбрать
ооооооомич, дорогой ты мой! сколько лет, сколько зим! У меня капча kley, пойдем поуёбываем! А как выглядит таблица?
Таблица:id username age---------------1 Петя 233 Вася 22...1000117 Маша 17Выбрать 10 случайных имён, не перебирая всю таблицу. Как?
Таблица:
id username age---------------1 Петя 233 Вася 22...1000117 Маша 17
Выбрать 10 случайных имён, не перебирая всю таблицу. Как?
снаружи делаешь список ID потом селект wher ID IN( список)
А если записи с таким ID не найдется?
Курсором, ептыблядь. Хуяришь случайное число, выбираешь запись под этим номером (по количеству сделанных FETCH).
добовляеш поле, в ето поле кладеш случайное число или md5 от номара, по етому полю индексгенерируеш случайное число и делаешselect * from table where field>? limit 1
>>340
>>340Проктолог-кун?
Правильно посоветовали - курсор в помощь или например сторед функцию напиши которая рандомы будет крутить внутри.
вариант с курсорами- тормознойиндексы не обеспечивают расчет числа записей и выборку по номеру позиции в индексе
>>347>вариант с курсорами- тормознойа больше, извини, никак.тебе просто необходимо иметь какой-никакой список ID (если, конечно, СУБД сама не проставляет свои внутренние Primary-ключи).конечно, есть еще вариант уебать по таблице триггером, ведущим список записей, добавленных, к примеру, в четное число милисекунд, если MD5 хэш от поля username делится на 7 нацело. по крайней мере, случайность будет повыше, чем у RAND().
>>347
>вариант с курсорами- тормозной
а больше, извини, никак.тебе просто необходимо иметь какой-никакой список ID (если, конечно, СУБД сама не проставляет свои внутренние Primary-ключи).конечно, есть еще вариант уебать по таблице триггером, ведущим список записей, добавленных, к примеру, в четное число милисекунд, если MD5 хэш от поля username делится на 7 нацело. по крайней мере, случайность будет повыше, чем у RAND().
>>349правильный вариант:добовляеш поле, в ето поле кладеш случайное число или md5 от номера, по етому полю индексгенерируеш случайное число и делаешselect * from table where field>? limit 1илиselect * from table where field>md5(?) limit 1если возвращает 0 записей то делаешselect * from table where field=>0 limit 1
>>349"тормозной вариант"означает что он практичски нерабочий при большом количестве записей
select * from table where field>? limit 1 order by fieldтак правильнееа вообще sql гавно - xBase рулиз!
ище надо смотреть скольки битное члучайное число гененрируетсячисло бит долгдно хотябы на 6 превышать число бит потребных для нумерации записей
и вообще те кто начал мзучать БД сразу с sqlте быдло и хуйло ибо они незнаю елеметнарных вещейпо еффективности запросовнужен либо солидный теоретический курс по Bдревья и прочей поебени используемой при индексациилибо практика на xBase
- wakaba 3.0.8 + futaba + futallaby -