Forum Webscript.Ru

Общие => Базы данных => Тема начата: glebushka от 18 Сентября 2005, 16:26:20

Название: сложная выборка
Отправлено: glebushka от 18 Сентября 2005, 16:26:20
Положим, есть таблица с полями:
id | group | priority
Ну и, например, следующие записи:
1 | alpha | 10
2 | alpha | 13
3 | alpha | 15
4 | betta | 13
5 | betta | 12
6 | betta | 17
7 | alpha | 20
Необходимо выбрать 4-ре идентификатора, 2 для группы альфа, и 2 для группы бетта. С наиботльшим приоритетом. Т.е. в данном случае: 7,3,6,4.
Количество групп может быть произвольным. Количество необходимых элементов из группы может быть проивольным. Порядок внутри группы важен (сортировка по полю priority). сортировка самих групп не важна. Я написал сначала альфу, потом бетту, но вполне подойдёт и бетта, а потом альфа. А можно и вообще в перемешку.
Есть идеи, как это можно сделать одним запросом?
Название: сложная выборка
Отправлено: unclebob от 18 Сентября 2005, 16:51:37
для версий >= 4.0.0

(SELECT id FROM my_table WHERE group=\'alpha\' ORDER BY priority DESC LIMIT 2)
UNION
(SELECT id FROM my_table WHERE group=\'betta\' ORDER BY priority DESC LIMIT 2)
ORDER BY group;
Название: сложная выборка
Отправлено: glebushka от 18 Сентября 2005, 18:12:15
unclebob, спасибо. Только не будет ли сиё тормозить, при количестве групп, скажем 60?