неравномерность выборки rand()

Tsep

Guest
неравномерность выборки rand()

Нужно случайно выбрать 2 записи из базы, пишу:
$queryb = "SELECT * FROM bt_ad where lang = '$lang' ORDER BY rand( ) LIMIT 2";
Выборка получается неравномерной, намного чаще выпадают записи из центра таблицы.
Посоветуйте как сделать более равномерную выборку?
 

leosha

Старожил PHPCLub
Написать ф-цию которая выдает "более равномерные" номера
и делать выборку WHERE id IN (...)
 

Tsep

Guest
Хорошо, напишу ф-ю, которая выбирает количество записей в базе и делает по ним равномерный рендер, но если какого-то id нет, был удален? Допустим id у меня 1,2,4,7,8,9... а рендомом получились числа 3 и 5. Что тогда?
 

Demiurg

Guest
причем тут id ?
тебе нужна функция, которая выдает числа в заданном интервале.
 

leosha

Старожил PHPCLub
Значит сделай ф-цию которая выбирает не кол-во записей, а все id которые есть в базе и среде этих записей уже "равномерный рендер" =)

Хотя это не правильно, на мой взгляд. Лучше уж проверить что SELECT ... WHERE id IN (...) вернул одну запись и повторить.
 

tony2001

TeaM PHPClub
>Выборка получается неравномерной, намного чаще выпадают записи из центра таблицы.
как выяснил?

если тебе нужно всего две записи - узнай общее кол-во записей в таблице, сделай [m]mt_rand[/m] от этого числа и LIMIT.
 

Tsep

Guest
//Demiurg
нужна функция выдающая не в заданном интервале, а среди заданных id.
//tony2001
mt_rand не подходит, так как какого-то id не может быть в базе.
>Выборка получается неравномерной, намного чаще выпадают записи из центра таблицы.
как выяснил?
Статистика ведется, и получается что из центра (сотировка по id) выпадают на порядок больше записей.

//leosha
видимо придется так извращаться. Думал, что есть более простой и красивый способ. спасибо.
 

nagash

Guest
а вот в коментах в доке очень хорошо эту проблему рассмотрели... и советовали использовать MD5(RAND())
я так пользуюсь... меня устраивает
 
Сверху