Познавательный блог Мобильная врсия

Страницы

Промо

Выбор случайного элемента из базы MySQL

Пришлось недавно писать такое чудо, чтобы баннеры выводились в одном месте в случайном порядке. Ротация, проще говоря.

SELECT * FROM table ORDER BY rand() LIMIT 1

Вариант простой, но тупой. При большой базе будет нереально тормозить.

А вот второй пошустрее.

$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);

При больших объемах таблицы (более 10 000 записей) этот запрос становится медленным и я бы советовал применять другой более сложный но быстрый запрос:

SELECT name FROM my_table JOIN ( SELECT CEIL(RAND() * ( SELECT MAX(id) FROM my_table )) AS randomID ) AS random_table ON random_table.randomID=my_table.ID

При сравнении первого и второго варианта были получены следующие данные:

1 вариант — 1,5 сек.
2 вариант — 0,001 сек.

Написать комментарий








Поиск по сайту

Статистика

Мета

  Разработка и дизайн — StvPromo.ru