Дата: марта 22, 2010
Категория: MySQL
Теги: , , ,  

Выборка случайных значений из таблицыо

Столкнулся с проблемой выборки случайных значений из таблицы.

SELECT * FROM tTable ORDER BY RAND() LIMIT 10;

не подходит, так как при большем количестве записей в БД запрос вызывает высокую нагрузку. Поискав в интернете нашел решение:

$row_count = mysql_result(mysql_query('SELECT COUNT(*) FROM tTable;'), 0);
$query = array();
while (count($query) < 10) {
$query[] = '(SELECT * FROM tTable LIMIT '.rand(, $row_count).', 1)';
}
$query = implode(' UNION ', $query);
$res = mysql_query($query);

1 Comment

  1. марта 23, 2010
    REPLY))

  2. RAND()
    RAND(N)
    Возвращает случайную величину с плавающей точкой в диапазоне от 0 до 1,0. Если целочисленный аргумент N указан, то он используется как начальное значение этой величины:
    mysql> SELECT RAND();
    -> 0.9233482386203

    mysql> SELECT RAND(20);
    -> 0.15888261251047

    mysql> SELECT RAND(20);
    -> 0.15888261251047

    mysql> SELECT RAND();
    -> 0.63553050033332

    mysql> SELECT RAND();
    -> 0.70100469486881

    В выражениях вида ORDER BY не следует использовать столбец с величинами RAND(), поскольку применение оператора ORDER BY приведет к многократным вычислениям в этом столбце. В версии MySQL 3.23 можно, однако, выполнить следующий оператор: SELECT * FROM table_name ORDER BY RAND(): он полезен для получения случайного экземпляра из множества SELECT * FROM table1,table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000. Следует учитывать, что оператор RAND() в выражении WHERE при выполнении выражения WHERE будет вычисляться каждый раз заново. Оператор RAND() не следует воспринимать как полноценный генератор случайных чисел: это просто быстрый способ динамической генерации случайных чисел, переносимых между платформами для одной и той же версии MySQL.

    1F

Написать ответ

 Имя

 Mail

 Сайт

[Имя и Mail обязательны для заполнения. Mail не будет опубликован.]


 9fce13c8-2714-4603-b8e7-33be6c785d58