Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Составление запроса (CryFall) 05/12/2007 - 11:58:30
      Re: Составление запроса (bac) 06/12/2007 - 14:42:43
      Re: Составление запроса (Eiffil) 16/12/2007 - 18:02:36
      Re: Три варианта (vi.k) 25/12/2007 - 08:33:51
      Re: не могу без ошибок (vi.k) 25/12/2007 - 08:38:51

> Original message text:
> From: CryFall - 05/12/2007 - 11:58:30
> Subject:Составление запроса
> -----------------
> База имеет вид:
>
> id(PK,AI) - name - category
>
> Надо сделать запрос чтобы результат, выводил по 3 ПОСЛЕДНИХ результата из каждой категории
>


From: vi.k - 25/12/2007 - 08:33:51
Subject:Три варианта
-----------------
1. Банальное решение, если *категории* можно пересчитать по пальцам:

(SELECT * FROM table WHERE categoty=1 ORDER BY id DESC LIMIT 3)
UNION
(SELECT * FROM table WHERE categoty=2 ORDER BY id DESC LIMIT 3)
UNION
(SELECT * FROM table WHERE categoty=3 ORDER BY id DESC LIMIT 3)
UNION
...

Большая величина запроса, зато, на мой взгляд, оптимальный вариант по скорости и ресурсам.


2. Второе решение, если *данных* в каждой категории немного:

SELECT GROUP_CONCAT(id," ",name ORDER BY id DESC) FROM table GROUP BY category;

А потом из каждой строки "вручную" взять первых три параметра.


3. Для любых условий, но за скорость и экономность памяти не ручаюсь:

SELECT id, name FROM
( SELECT @n:=IF(@c=category,@n+1,1) n, @c:=category, name
FROM table ORDER BY category, id DESC) tmp
WHERE n<=3;

Суть: таблица сортируется по категориям, а внутри категорий - по идентификаторам в обратном порядке. Каждой строке записи в соответствие ставится номер: 1,2,3,3,4... На кажой новой категории счётчик сбрасывается (=1) (если взять отдельно вложенный запрос, можно всё это увидеть наглядно). Соответственно, вторым запросом выбираются только записи с номерами 1,2,3


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
32643



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |