[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выбрать по 2 записи для каждой из категорий
123456
Есть таблица:

id | id_category | text | date


Как выбрать по 2 последнии записи для каждой из категорий?
Миша
LIMIT 2 - две записи
DESC - последние

для каждой из категорий - сгруппировать

_____________
Принимаю заказы, писать в ЛС
123456
по две записи для каждой из категорий, а не всего 2 записи
Миша
Цитата (123456 @ 14.08.2015 - 20:05)
по две записи для каждой из категорий, а не всего 2 записи

Запрос внутри запроса - тогда по две записи для каждой из категорий будет

_____________
Принимаю заказы, писать в ЛС
123456
приведи пример
Миша
Пока в голову пришло только это, LIMIT результата в группе не оказывает, а работает уже после группировки



select t.* from (select `id` from (select `id_category`, `id` from `test` ORDER BY `id` DESC)a group by `id_category`)b left join `test` t on t.id = b.id



_____________
Принимаю заказы, писать в ЛС
123456
Эм... ты то сам понял, что сделал?
Миша
Цитата (123456 @ 14.08.2015 - 21:53)
Эм... ты то сам понял, что сделал?

А что тут непонятного ) Может задачу не так понял?

Сначала сортируем в обратном порядке, потом группируем (2 записи низнаю как достать из одной группы)

Потом дёргаем из таблицы эти значения

_____________
Принимаю заказы, писать в ЛС
123456
Цитата
2 записи низнаю как достать из одной группы


Так а что твой запрос то делает? biggrin.gif
Объясни словами! Сортирует... Группирует... ииии... biggrin.gif

Основная то задача
Цитата
выбрать по 2 последнии записи для каждой из категорий

Миша
Цитата (123456 @ 14.08.2015 - 22:02)
Цитата
2 записи низнаю как достать из одной группы


Так а что твой запрос то делает? biggrin.gif
Объясни словами! Сортирует... Группирует... ииии... biggrin.gif

Основная то задача
Цитата
выбрать по 2 последнии записи для каждой из категорий

Эмм .. wink.gif

Думал, что LIMIT справится с этой задачей, но он работает уже после группировки.

Сейчас достаёт по одной послежней записи из каждой группы.

_____________
Принимаю заказы, писать в ЛС
sergeiss
Цитата (123456 @ 14.08.2015 - 19:32)

id | id_category | text | date

Как выбрать по 2 последнии записи для каждой из категорий?

Вот такой запрос нарисовался :)

Стёр нафиг всё, что сначала написал и сделал по-другому:

select * from
( select id_category, text, date
from you_table
order by date desc
limit
0,1
) r1
union
select
* from
(
select id_category, text, date
from you_table
order by date desc
limit
1,1
) r2
order by id_category, date


Первая часть выбирает все последние, вторая часть все предпоследние записи (если таковые имеются). Эти подзапросы можно сджойнить, при желании.

Запросы не тестировал, написал "на коленке". Так что проверяй сам :)

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
123456
sergeiss
а если надо выбрать 10-20 записей к каждой категории?

Уже прще для каждой категории писать отдельный запрос и все соединить через UNION
volter9
123456
Это можно сделать с помощью SQL переменных:
SET @i  := 0;
SET @id := 0;

SELECT q.*, @i := @i + 1, @id := q.category_id
FROM (
SELECT l.id, l.title, l.category_id
FROM links l
ORDER BY l.category_id ASC, id DESC
) AS `q`
WHERE (IF(@id = q.category_id, @i, @i := 0 AND @id = q.category_id) <= 1);

Типа так, где 1 это N-1 нужного кол-во тебе последних записей.

Запрос:
user posted image
Данные:
user posted image

_____________
Мой блог
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.