Выборка по три записи для каждого значения определенного поля

  • Автор темы absoluteplush
  • Дата начала

absoluteplush

Guest
Выборка по три записи для каждого значения определенного поля

Есть запрос типа:

[sql] (
SELECT id, cy, dt, parent
FROM table
WHERE parent =1
AND visible = '1'
ORDER BY cy DESC
LIMIT 0 , 3
)
UNION (

SELECT id, cy, dt, parent
FROM table
WHERE parent =6
AND visible = '1'
ORDER BY cy DESC
LIMIT 0 , 3
)
UNION (

SELECT id, cy, dt, parent
FROM table
WHERE parent =9
AND visible = '1'
ORDER BY cy DESC
LIMIT 0 , 3
)
ORDER BY parent;[/sql]

То есть в результате мне нужно получить по три записи для каждого значения parent (1, 6, 9).
Для простоты убрал пару юнионов, но сами понимаете что это долго, тем более что юнионов будет 8-12. Как это оптимизировать или запросить без юнионов?
 

crocodile2u

http://vbolshov.org.ru
Возможно, пригодится следующее решение: выбирать все записи для нужных значений parent, а после уже скриптом оставлять только первые три для каждого parent. Думается, это все же будет быстрее...
[sql]
SELECT id, cy, dt, parent
FROM TABLE
WHERE parent IN (1, 6, 9) AND visible = '1'
ORDER BY parent ASC, cy DESC
[/sql]
 

absoluteplush

Guest
В таблице тысяч 15 немаленьких записей...
 

chira

Новичок
составной индекс parent+visible
использовать UNION ALL
для 15 тысяч записей должно и так быстро работать ...
 
Сверху