[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Нужно выбрать 5 случайных уникальных записей
rolling
Есть таблица news: id | menu_id | title .... содержащая новости, которые принадлежат к определенным рубрикам (menu_id)
Нужно выбрать 5 случайных записей, но чтобы они были из разных рубрик (menu_id не должен повторяться)

Таблица menu (рубрики): id | name

Подскажите,какие изменения нужно внести в этот запрос, чтобы реализовать вышеизложенную задачу?
SELECT news.*, menu.name as name FROM news, menu WHERE menu_id=menu.id  ORDER BY RAND() LIMIT 5




Спустя 1 час, 23 минуты, 20 секунд (26.05.2010 - 19:35) vagrand написал(а):
Честно говоря вот так чтобы одним запросом из разных рубрик и чтобы они не повторялись я не вижу решений. Единственное могу посоветовать не использовать order by rand(), т.к. он здорово замедляет запрос. Рандомную выборку можно сделать по следующему алгоритму:
1. Определяете общее количество записей в таблице news;
2. Делите общее количество на 5 с округлением в меньшую сторону, предположим результат записан в переменную $n;
3. Собираете запрос с лимитом "limit " . rand(1, $n) . ", 5".

Это намного ускорит запрос.

Спустя 3 часа, 9 минут, 50 секунд (26.05.2010 - 22:45) FatCat написал(а):
Быстрее будет работать 5 запросов с ограничением menu_id по WHERE.
Рандомную цифру делать в пхп и подставлять в LIMIT запроса.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.