Измените запрос так, чтобы он всегда работал со списком id (даже в случае одного). Тогда свободного сможете грузить хоть по одиночке, хоть все вместе.
Далее, можно сделать так, как описывал @igorvar
здесь. А именно, доставать параметры статей из кеша, а те статьи, которые в кеше не лежат, грузить из базы данных описанным выше запросом.
Хотя, если всё, что делает Ваш сайт — это выводит статьи (а значит, их максимум 50 на странице), то можно грузить по одной и класть в кеш. Т.е. делать именно так, как описал @igorvar, без изменения запросов.
Кстати, запросы на получения данных по одному id очень хорошо кешируются базой данных. Поэтому если грузить статьи одиночными запросами и выделить базе данных столько оперативки, чтобы ей хватало для эффективного кеширования (зависит от количества данных в Вашей базе данных и количества реально используемых данных в определённый момент времени), то база данных сама будет неплохо кешировать результаты запросов.
В общем, если Вы дадите чуть больше информации, то может оказаться, что у Вас итак всё хорошо.