SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 04.11.2010 10:11:04

Марк
Активист
Зарегистрирован: 31.05.2010
Сообщений: 157

Запрос на выборку записей с лимитом по id

Здравствуйте.
У меня есть таблица.

category
------------------
id ...
1
1
1
3
3
3
2
2

Есть ли возможность выбрать записи таким образом.

category
------------------
id ...
1
1
3
3
2
2

Т.е сделать лимит на вывод по id. Если id=1,id=3 имеется в таблице 50 записей, то мне необходимо выбрать только 2 записи. У меня опыта не хватает так сделать. Если это вообще возможно.

Отредактированно Марк (04.11.2010 12:48:42)

Неактивен

 

#2 04.11.2010 14:58:08

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Запрос на выборку записей с лимитом по id

Только отдельными запросами. Ну то есть
(SELECT ... WHERE id = 1 LIMIT 2)
UNION
(SELECT ... WHERE id = 2 LIMIT 2)

Неактивен

 

#3 04.11.2010 15:16:06

vaspet
Завсегдатай
Зарегистрирован: 11.03.2009
Сообщений: 83

Re: Запрос на выборку записей с лимитом по id

А так?:

(SELECT * FROM `category` group by `id`)
UNION ALL
(SELECT * FROM `category` group by `id`)

Неактивен

 

#4 04.11.2010 18:08:19

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Запрос на выборку записей с лимитом по id

Там нужна не группировка, там надо достать по 2 строки каждого типа sad

Неактивен

 

#5 05.11.2010 02:05:37

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5833

Re: Запрос на выборку записей с лимитом по id

Если нужно выбрать по две строки для каждого типа, то

set @i=0,@p=0;
select * from category where if(@p=id,@i:=@i+1,(@i:=0) or (@p:=id)) and @i<2;


Первоначальное определение переменных можно сделать внутри запроса:
select * from category join (select @i:=0,@p:=0) t where if(@p=id,@i:=@i+1,(@i:=0) or (@p:=id)) and @i<2;


Если id идут в таблице в произвольном порядке, то нужен подзапрос, чтобы их сначала отсортировать:
select * from (select * from category order by id) t1 join (select @i:=0,@p:=0) t2 where if(@p=id,@i:=@i+1,(@i:=0) or (@p:=id)) and @i<2;


Если же ограничение требуется только для конкретных id (id=1,id=3), то проще отдельными запросами.

Неактивен

 

#6 05.11.2010 02:08:04

Марк
Активист
Зарегистрирован: 31.05.2010
Сообщений: 157

Re: Запрос на выборку записей с лимитом по id

Спасибо.

Отредактированно Марк (05.11.2010 13:57:44)

Неактивен

 

#7 05.11.2010 14:08:08

vaspet
Завсегдатай
Зарегистрирован: 11.03.2009
Сообщений: 83

Re: Запрос на выборку записей с лимитом по id

paulus написал:

Там нужна не группировка, там надо достать по 2 строки каждого типа sad

блин... hmm

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson