Как решить такую задачу более грамотно?

Духовность™

Продвинутый новичок
Как решить такую задачу более грамотно?

Привет.

Есть таблица со статьями, есть таблица рубрик.

Нужно выводить статьи по 4 штуки из каждой рубрики. Рубрик 6 шт.

Я правильно понимаю, что не существует иного способа, кроме как идти циклом по количеству рубрик и делать на каждую рубрику отдельную выборку? Т.е.

PHP:
// получаем id рубрик в массив $rubrics


foreach ($rubrics as $id)
{
     // select ... from ... where id = $id
}

в количестве получается 6 запросов. Можно как-то сократить это количество?
 
ну, по крайней мере все варианты, которые приходят в голову, заметно тяжелее, чем 6 простых запросов с выборкой по индексу
если уж очень хочется, можно ввести дополнительные поля (например, последовательный order_id в "обратном порядке) и доставать все уже одним запросом, но затраты на поддержание оного наверняка выше чем получаемый выигрыш который все равно мизерный
 
Оч. содержательное название топика

upd.

UNION
 
ну, по крайней мере все варианты, которые приходят в голову, заметно тяжелее, чем 6 простых запросов
Смотрите: http://www.moscow-post.ru/

Видите структуру сайта? На главной выводится большое количество новостей и статей. Для каждой рубрики идет запрос на выборку новостей и статей. Имеем 8 рубрик, т.е. 2 запроса на каждую. В сумме это 16 запросов!

Меня смущает реализация такого подхода, я не уверен, что это правильный подход. А что делать не знаю.

Тут ещё и время генерации страницы доходит до Н-ного количества секунд. То сервер быстро отдает, то долго думает. А с чем это связано - я не пойму. На локалхосте это работает относительно быстро- время генерации занимает 0.2 - 0.5 сек.
 
triumvirat
кешируй блоки с инфой по каждой рубрике или всю страницу целиком.
 
да, тут самый правильный вариант это кэш.
либо в статику, либо в memcached по ситуации
 
а если кэшировать, то я так понимаю, что при каждом новом добавлении новости или статьи делать перегенерацию? а это не накладно?
 
сейчас у тебя каждый раз генерится, это точно не менее накладно :D

вообще, схема работы с кэшем (memcache, файловым - не важно) обычно такая.

1. для каждой кэшируемой единицы имеется уникальный идентификатор (ключ memcache, имя файла, ...)
2. при выборке смотрим, есть ли информация в кэше, если нет - берем из базы и обновляем кэш
3. при обновлении данных просто удаляем из кэша то, что поменялось
 
а ключ зачем нужен? почему бы просто не сохранять в кэше файлы с html-кодом под именами имя_рубрики.html ??
 
имя рубрики это тоже ключ. если оно уникально. ;)

если у тебя есть возможность хранить хтмл-код целиком, и там нигде посередине не надо впихивать разную хитрую динамику - то это вообще замечательно и все сводится к
if (!file_exists($file)) {
// генерируем и не забываем проверять-выставлять флажки, чтобы 10 процессов не генерили одно и то же параллельно
}
readfile($file);
 
Сверху