Вложеный запрос с LIMIT по уникальным ID

Ekklipce

Новичок
Вложеный запрос с LIMIT по уникальным ID

[sql]
select i.subpart_id,i.name,
i.percent,
i.position,
i.absnum as id,
sub.name AS parent,
sub.main AS main,
sub.position AS spos,
p.name AS capt,
p.caption AS head
FROM ra_part AS p
LEFT JOIN ra_subpart as sub on (sub.part_id = p.absnum)
LEFT JOIN ra_item as i on (i.subpart_id = sub.absnum)
where p.absnum = 362 and p.approved = 1 and p.langid = 1
order by sub.main desc, sub.position asc, id asc
[/sql]

результат что то типа :
545 .....
545 .....
545 .....
545 .....
545 .....
567 .....
567 .....
567 .....
567 .....
567 .....
569 .....
569 .....

и так далее...

нужно отлимитировать выборку по каждому i.subpart_id, то есть к примеру 10 верхних значений по 545, 10 по 567 и так далее..
скорее всего юзаться будет sub query.. с этим и наряг.. :(
 

zerkms

TDD infected
Команда форума
если тебе очень нужно это - то заведи sql-переменную. в каждой следующей записи увеличивай на 1, и группируй по CONCAT(`id`, '-', @num % 10)

т.е. у тебя получится чтото типа 545-0, 545-1, ...

но только это слишком дорогое решение имхо
 

Ekklipce

Новичок
идея какая :
выбрать все subpart_id сначала,
потом их черезх переменную в запрос, так вот именно с понятной логикой возникли проблемы с конструкцией такого запроса, здесь собственно и SOS)))

Народ, помогите
 

zerkms

TDD infected
Команда форума
Ekklipce
логику выше я тебе уже нарисовал. примерно это всё выглядит так:

[sql]
SET @a=0;
SELECT CONCAT(`subpart_id`, '_', (@a:=@a+1) % 10) AS `grp_field`, ... FROM `table` GROUP BY `grp` ORDER BY `grp_field`;
[/sql]

если будут предложены более элегантные / производительные варианты, запишу их в блокнотик с оригинальными решениями ;)
 

Ekklipce

Новичок
кстати аналогично я записал в блокнотик логику Distinct SUM по сгрупированной дате :))..

а здесь проблему решил не элегантно, но зато производително,

просто разбил на два запроса...
 

zerkms

TDD infected
Команда форума
Ekklipce
покажи решение (для задачи об ограничении числа одинаковых значений поля)
 
Сверху