Как выбрать случайные записи, каждый раз разные

Статус
В этой теме нельзя размещать новые ответы.

virtualbrest

Полезный
Регистрация
6 Май 2007
Сообщения
210
Реакции
18
Есть таблица, в ней заголовки новостей, при показе той или иной новости делается выборка по базе по определенным тегам по заголовкам новостей. Так вот как бы это так исхитриться, что бы раз от раза показывать не те же самые новости для тегов, а каждый раз новые.
Блин, видимо непонятно...

Так:

Новость: К нам поступили новые амортизаторы для автомобилей Жигули.

Теги: поступили новые амотрижаторы Жигули

В базе полно сообщений с такими словами, и если просто:

PHP:
$sql = "SELECT id FROM table WHERE zagolovok LIKE '% $tags %' LIMIT 5";

то выборка делается 5 элементов, содержащих слово $tags обрамленное пробелами. Как построить запрос, что бы эти 5 находились каждый раз разные, причем неважно как, по какой сортировке, главное что бы разные, не обязательно все,но что бы хоть некоторые.
 
Добавить в запрос ORDER BY RAND() .
 
SELECT * FROM `table` ORDER BY RAND() LIMIT 5; Всегда им пользовался)))
В статье выше про 4 варианта, есть интересная запись о минимуме и максимуме, а остальные 2 способа не совсем понял, подустал я..
 
Да вы что!!!!!!!!Вы себе представляете план такого запроса????
А если записей 1000000????
:bc::bc::bc:
А если без если?
Приведён простейший пример, так как исходных данных нет никаких.
Коль уж бороться за чистоту и скорость. то какой план будет у поиска LIKE? ;)
 
Да не народ, искалось именно это, простейший вариант без замутов, ну записей за полгода набралось около 1000, пока скорость работы устраивает :) а там посмотрим... Еще раз спасибо.
 
Да вы что!!!!!!!!Вы себе представляете план такого запроса????
А если записей 1000000????
:bc::bc::bc:

Да без разницы, критерии выборки то можно ограничить limit'ом
а вообще надо создавать индексы, чтобы пошустрее
 
цитата с хабра лень писать самому порсто

цитата с хабра лень писать самому порсто
Если в таблице больше, чем 10 тысяч строк, то ORDER BY RAND() будет работать очень медленно. Гораздо более эффективно будет выполнить два запроса:

Если в таблице auto_increment'ный первичный ключ и нет пропусков:
$rnd = rand(1, query('SELECT MAX(id) FROM table'));
$row = query('SELECT * FROM table WHERE id = '.$rnd);

либо:
$cnt = query('SELECT COUNT(*) FROM table');
$row = query('SELECT * FROM table LIMIT '.$cnt.', 1');
что, однако, так же может быть медленным при очень большом количестве строк в таблице.

Добавлено через 2 минуты
Да без разницы, критерии выборки то можно ограничить limit'ом
а вообще надо создавать индексы, чтобы пошустрее
Если у вас ьаза данных на 200000 сначала все ти строки выберуться потом отсортируются(да да все!!!) случайным образом и только потом будут отобранны те что вы укажете в лимите,
 
Упоминал достаточно шустренький вариант для большого количества записей тут:
Для просмотра ссылки Войди или Зарегистрируйся
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху