Выборка случайных значений из БД MySQL
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Выборка случайных значений из БД MySQL - 2008-10-24 20:28:09.726666
|
|
|
lovop2
Сообщений: 10
Оценки: 0
Присоединился: 2008-10-24 20:26:12.210000
|
Есть таблица link с полями id, url, title, category, active. В этой таблице хранится список ссылок на сайты (url), название сайта (title), категория (category), active (одобрен модератором, тип boolean). id это уникальный идентификатор. Запрос такой SELECT url, title FROM link WHERE category=foto AND active=true в PHP есть rand, это я знаю. После этого запроса скрипт получит список сайтов, теперь надо выбрать из получившегося списка случайным образом 10 разных сайтов. Вот как это сделать не знаю, какой SQL-запрос использовать?
|
|
|
RE: Выборка случайных значений из БД MySQL - 2008-10-24 20:29:42.196666
|
|
|
lovop2
Сообщений: 10
Оценки: 0
Присоединился: 2008-10-24 20:26:12.210000
|
"ORDER BY RAND() LIMIT 10" С запросом LIMIT я знаком, поэтому знаю что это лимит. Да, идея правильная. Но эта rand может сгенерировать одинаковые значения, а мне надо разные каждый раз. Может результат первого запроса добавить с массив (как функция file) и из этого массива for i=1 to 10 и каждый раз в теле цикла вызывать rand (0, длина_массива) и после этого удалять из массива выбранный элемент?
|
|
|
RE: Выборка случайных значений из БД MySQL - 2008-10-24 20:31:14.743333
|
|
|
oRb
Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
|
SELECT `url`, `title` FROM `link` WHERE `category`='foto' AND `active`='true' ORDER BY RAND() LIMIT 10 Выдаст 10 "случайных" записей UPD: o_O опередил меня. quote:
Но эта rand может сгенерировать одинаковые значения, а мне надо разные каждый раз. там нормальная генерация случайной последовательности.
|
|
|
RE: Выборка случайных значений из БД MySQL - 2008-12-04 00:42:23.530000
|
|
|
kenan_bek
Сообщений: 95
Оценки: 0
Присоединился: 2008-06-22 13:42:33.113333
|
а как выбрать последний элемент из таблицы?
|
|
|
RE: Выборка случайных значений из БД MySQL - 2012-03-04 23:02:27.310000
|
|
|
SizeKing
Сообщений: 41
Оценки: 0
Присоединился: 2010-03-03 10:48:33.933333
|
Для особо одаренных меняем
$query = "SELECT * FROM `xxx` ORDER BY RAND() LIMIT 0 , 15;"; на
$offset_result = mysql_query("SELECT FLOOR(RAND() * (COUNT(*)-15)) AS `offset` FROM `xxx`;");
$offset_row = mysql_fetch_object($offset_result);
$offset = $offset_row->offset;
$query = "SELECT * FROM `xxx` LIMIT $offset, 15;"; потому как эти 2 кода индентичны но нижний работает в сотни раз быстрее а про ORDER BY RAND() нужно забывать - потому как это быдлокод и при табличке размером в 100 000 записей и выше этот код повесит сервер все дело в том что ORDER BY RAND() создает временную таблицу размером с исходной представляете сколько по времени будет копироваться табличка в 100 000 строк - как минимум 10 секунд - а значит на сайте загрузка страницы будет занимать 15 сек, а если на сайте будет 10 посетителей то сервер нагнется
|
|
|
RE: Выборка случайных значений из БД MySQL - 2012-03-09 13:56:55.660000
|
|
|
bob3r
Сообщений: 67
Оценки: 0
Присоединился: 2011-06-03 02:30:17.840000
|
В Microsoft SQL для рандомизации использовал дополнительную колонку временной таблицы, в которую генерировался GUID, с сортировкой по нему. Как понял с offset и правда будет быстрее, но offset нет в SQL 2000-2008 R2.
|
|
|
|
|