среда, 13 августа 2008 г.

Случайная запись с учетом "веса"

Встретилось вот в конференции:

WildSery wrote:
> вот одно элементарное решение.
> заводим таблицу WEIGHT(weight int) и заполняем её числами от 1 до <максимальный вес>
> затем нужное нам "случайное с учётом веса" получаем как
>
> select first 1 t.id
> from table1 t
> join weight w on t.weight >= w.weight
> order by rand()

Ну типа идея такова - для таблицы TABLE1, откуда нужно получить случайный ID, размножаем строки согласно "веса".
Если "вес" равен 1 - будет 1 строка, если "вес" 10 - будет 10 строк, соответственно, вероятность, что попадётся именно этот ID, в 10 раз выше, чем для "веса" 1.

--
Сергей Смирнов.

Комментариев нет: