|
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,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
32643
|
|