MySQL пересортировка внутри группы @ DeForum.ru
DeДверь  
Логин:  
Пароль:  
  Автологин  
   
Разместить рекламу
Письмо админу
Правила | FAQ | *Поиск | Наша команда | Регистрация | Вход
 
 
 Страница 1 из 1 [ Сообщений: 10 ] 
*   Список форумов / Начинка и техника / Программирование для WWW » ответить » создать топик « | »
Автор Сообщение
gregzem Муж.
новый человек
2
Сообщения: 252
Зарегистрирован: 29.04.03
Заголовок сообщения: MySQL пересортировка внутри группы
Сообщение Добавлено: 1 Июль 2007, 21:43:11 
Есть MySQL таблица

Код:
ID     GroupID    Priority
-----------------------------------
1          1               1
2          2               3
3          3               2
4          3               2
5          1               1


Нужно получить выборку

Код:
ID     GroupID    Priority
-----------------------------------
5          1               1
4          3               2
2          2               3


То есть отсортировать записи по приоритету по возрастанию, сгруппировать по GroupID и из каждой группы взять строку с максимальным ID.

Пробовал

SELECT GroupID, Priority FROM table GROUP BY GroupID ORDER BY Priority ASC, ID DESC

Не канает. Возвращается

Код:
ID     GroupID    Priority
-----------------------------------
1          1               1
3          3               2
2          2               3



То есть получается, что внутри группы элементы отсортированы по возрастанию ID и берется из них первый.
Jamakaser Муж.
участник
91
Сообщения: 1163
Зарегистрирован: 26.01.05
Сообщение Добавлено: 1 Июль 2007, 23:14:09 
Код:
SELECT groupid, priority, MAX(id) AS id FROM table GROUP BY groupid ORDER BY priority

_________________
Найди кликабельный пиксель -->
gregzem Муж.
новый человек
2
Сообщения: 252
Зарегистрирован: 29.04.03
Сообщение Добавлено: 2 Июль 2007, 11:11:28 
Вон оно как. Спасибо.
gregzem Муж.
новый человек
2
Сообщения: 252
Зарегистрирован: 29.04.03
Сообщение Добавлено: 2 Июль 2007, 14:19:19 
А как быть, если у меня кроме этих трех полей есть еще штук 10. И мне надо каждое из них взять для строки с MAX(id)?

Поясню:

Код:
ID     GroupID    Priority  SomeText
-------------------------------------------
1          1               1        "ABABAB"
2          2               3        "Test"
3          3               2        "Another Text"
4          3               2        "Hello, World"
5          1               1        "Bugaga"


В результате нужно получить

Код:
ID     GroupID    Priority   SomeText
--------------------------------------------
5          1               1        "Bugaga"
4          3               2        "Hello, World"
2          2               3        "Test"


то есть та же задача, но для "SELECT *"?
Jamakaser Муж.
участник
91
Сообщения: 1163
Зарегистрирован: 26.01.05
Сообщение Добавлено: 2 Июль 2007, 14:26:02 
не понял. А в чем проблема? Перечислить все нужные поля в запросе.

_________________
Найди кликабельный пиксель -->
gregzem Муж.
новый человек
2
Сообщения: 252
Зарегистрирован: 29.04.03
Сообщение Добавлено: 2 Июль 2007, 16:20:46 
Если Вы про
Код:
SELECT groupid, priority, SomeText, MAX(id) AS id FROM table GROUP BY groupid ORDER BY priority


то возвращается

Код:
ID     GroupID    Priority   SomeText
--------------------------------------------
5          1               1        "ABABAB"
4          3               2        "Another Text"
2          2               3        "Test"


а нужно, чтобы

Код:
ID     GroupID    Priority   SomeText
--------------------------------------------
5          1               1        "Bugaga"
4          3               2        "Hello, World"
2          2               3        "Test"


То есть ID (поскольку берется MAX(ID)) возвращается корректно, а все остальные поля возвращаются из первой строки группы.
Jamakaser Муж.
участник
91
Сообщения: 1163
Зарегистрирован: 26.01.05
Сообщение Добавлено: 2 Июль 2007, 16:34:13 
А что мешает написать

Код:
SELECT groupid, priority, MAX( SomeText ) AS SomeText, MAX( id ) AS id


?

_________________
Найди кликабельный пиксель -->
Jamakaser Муж.
участник
91
Сообщения: 1163
Зарегистрирован: 26.01.05
Сообщение Добавлено: 2 Июль 2007, 16:36:03 
Только расскажите потом с какой скоростью оно работать будет. Интересно :-)

_________________
Найди кликабельный пиксель -->
gregzem Муж.
новый человек
2
Сообщения: 252
Зарегистрирован: 29.04.03
Сообщение Добавлено: 2 Июль 2007, 21:16:28 
"Нет, такой футбол нам не нужен". Думается мне тут можно сделать с подзапросом.
gregzem Муж.
новый человек
2
Сообщения: 252
Зарегистрирован: 29.04.03
Сообщение Добавлено: 3 Июль 2007, 16:52:13 
Для потомков, может кому пригодится

Код:
SELECT * FROM table WHERE ID IN (SELECT MAX(ID) FROM table WHERE (ParentID='нод') GROUP BY RealID) ORDER BY Priority;
*   Список форумов / Начинка и техника / Программирование для WWW « | » » ответить » создать топик
 Страница 1 из 1 [ Сообщений: 10 ] 
Показать сообщения за:   Поле сортировки  
Найти:
Перейти:  
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.
cron


ООО ДеФорум
При использовании материалов сайта ссылка на DeForum.ru — обязательна.
Проект Павла Батурина ©2001-2077; // Powered by phpBB © 2013 phpBB Group
Rambler's Top100