MySQL Как оптимизировать запрос по 3 параметрам в базу данных

программирование программы php MySQL sql

Мне нужно вытянуть из таблици по 3 поста с 3х разних категорий.
Сейчас я делаю 3 запроса по каждой категории отдельно, запрос выглядит так:

"SELECT
p_id,p_title,p_article,p_author_id,
a_fio,a_profile, a_id
FROM _posts
LEFT JOIN _authors
ON p_author_id = a_id
WHERE p_cat_id='$val'
AND p_post_of_day='1'
ORDER BY p_pablic_date DESC
LIMIT 3"

Но посещаемость сайта достаточно большая, а ресурсы сервера не безграничные. Можно ли как нибуть это дело свести к 1 запросу?

Зарание благодарствую.

Примечание:
ResidentR6
Проблема в том, что выводится должны посты, которые обозначены как "пост дня" в категория, которая тоже имеет такую отметку (не все подряд) и выстраиваться по хронологии.

Если в один запрос это нельзя слипить, то разве что делать отдельно запись в базу, где сохранять id последних обозначених как "Пост дня" записей в последней обозначенной как "Пост для" категории... Но это больше похоже на костыль, и как то не комильфо, хотя и лучше, чем есть сейчас. Хотелось бы найти какое то простое и элегантное решение...

Спасибо за то, что нактолкнул на мысль

ПС: все поля id с автоинкрементом.
Ответы:
Можно.
1) Выпили нафиг "ORDER BY", согласись для трёх записей он нафиг не нужен.
2) Какие индексы есть в таблице POSTS? Если p_id у тебя целочисленный с автоинкрементом - сделай вот что: сделай этот индекс декрементным. Чтобы он шёл в обратном порядке. Тогда самые последние записи в нём пойдут первыми.
А ещё лучше - прокешируй на стороне сервера этот запрос и обновляй кеш 1 раз в 5 минут.
Про sql inject +1


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.