Автор Тема: сложная выборка  (Прочитано 3485 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
сложная выборка
« : 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

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 96
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
сложная выборка
« Ответ #1 : 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

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
сложная выборка
« Ответ #2 : 18 Сентября 2005, 18:12:15 »
unclebob, спасибо. Только не будет ли сиё тормозить, при количестве групп, скажем 60?
Ну к чему все это, лучше бы водки выпили...

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28