Помогите составить mysql select запрос, подробности под катом

Есть табличка в ней 3 поля
category_id,post_id,date
Первое это ид рубрики второе это ид записи. третье это время добавления записи. Возможно ли одним запросом вытащить для конкретных рубрик запись которая была добавлена самой первой и 2 записи которые были добавлены самыми последними(если они конечно есть)? И если не одним то сколько запросов нужно чтобы это работало максимально быстро?
  • Вопрос задан
  • 2735 просмотров
Пригласить эксперта
Ответы на вопрос 3
xiWera
@xiWera
select * from (select * from tbl order by date limit 1) as foo union select * from tbl order by date desc limit 3
Ответ написан
mgyk
@mgyk
Могу предложить алтернативный вариант. Если постов много будет получить варнинг, хотя тут он как раз нам не мешает. (GROUP CONCAT не поддерживает LIMIT)
select GROUP_CONCAT(post_id ORDER BY date desc),category_id from tmp GROUP BY category_id;
select GROUP_CONCAT(post_id ORDER BY date),category_id from tmp GROUP BY category_id;

Таким образом можно стянуть даные сразу по всем категорям WHERE category_id IN (1,2,3,4,5). Отрезать нужное количество post_id проще в скрипте, а не в самом SQL (ну или LOCATE, LEFT, etc.)
Ответ написан
shushu
@shushu
>> И если не одним то сколько запросов нужно чтобы это работало максимально быстро?
не всегда 1 запрос работает быстрее нескольких. Иногда лучше написать несколько запросов.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы