Нужно выбрать 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".
Это намного ускорит запрос.
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 запроса.
Рандомную цифру делать в пхп и подставлять в LIMIT запроса.