Vah чесна гря делал один раз такой рандом но дб была SQLite, а там есть транзакции, а главное не дырявый ROWID
ну транзакции тут непричем..... они стоят в сторонке и нервно курят..... Не дырявый ROWID это уже значительно упрощает задачу...... Тут даже думать долго не надо...... с хода писать можно..... =) А вообще какой SQL (MySQL или SQLite или MaxDB и т.д.) - для алгоритма значения не имеет......
Кстати в принципе можно сделать и так... Сначала Код (Text): SELECT * FROM tbl_name ORDER BY RAND(); А потом уже на РНР отсортировать то что получилось так
это ты первой задачке?? тогда нет..... там все делается 1-м запросом..... и можно сделать с упорядочевая по 1 значению.... если ко 2-й.... запрос с более миллиона записей при посещяемости хотя бы 3 хита в секунду - загнет сервер.... =)
ЛИМИТ - конечно хорошо.... Только сначала выберется вся эта балясина, потом отсортируется по рандомному параметру и потом он отрежет $limit записей....
Vladson с лимитом или без - нагрузка не в этом сервак в любом случае для каждой записи будет рандом генить, а потом сравнивать - это время и занимает
Короче ORDER BY RAND() не подойдет..... это равносильно $res=mysql_query("SELECT * FROM hints"); $count=mysql_num_rows($res); вместо SELECT COUNT(*) ... при ордере рандомном сначала он все записи выберет назначив им рандомно позицию для сортировки рандомной, потом отсортирует и только потом отбросит все что выходит за предел LIMIT'а Ti ага... не быстро =)
через час-полтора отпишу ответ к сий задачке..... времени подумать думаю было достаточно..... Если у кого ещё какие мысли - пишите пока не выложил ответ.... =)
Ti через LIMIT поиграть неполучится..... надо выбрать из всей таблицы а не из определенного региона.... размером в 100 записей..... Хотя не получится - конечно громко сказанно..... но вот время выполнения такого запроса..... Алгоритм такой 1) select K * (count(id) / (max(id) - min(id))) as num_of_rand 2) подобираем коэффициент k чтобы всегда хватало экспериментально в районе 1.5 - 2.5 3) генерим num_of_rand * $limit случайных чисел в диапазоне min - max 4) делаем выборку where id in (снегеренные числа) limit $limit