SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 25.04.2011 21:26:46

alex4
Участник
Зарегистрирован: 25.04.2011
Сообщений: 3

Сортировка в запросе

Здравствуйте
Необходим совет более опытных разработчиков smile
Ситуация вот в чем
Имеем таблицу в которой есть поля
id, name, sortname, posicion, date
нужно сформировать запрос таким образом чтобы вывод шел по sortname  (т.е. с начала все записи одного значения sortname, потом другого, и т.д.) но при этом между собой sortname сортировались по полю posicion либо по date если posicion равны
должно в итоге получится такое
sortname_w
-- name 1 (posicion = 1)
-- name 2 (posicion = 1)
-- name 3  (posicion = 8)
sortname_f
-- name 7  (posicion = 1)
-- name 8  (posicion = 3)
-- name 9  (posicion = 9)
sortname_b
-- name 4  (posicion = 3)
-- name 11  (posicion = 3)
-- name 6  (posicion = 4)
-- name 5  (posicion = 5)
-- name 10  (posicion = 7)

Подскажите пожалуйста как такую выборку сделать запросом mysql?

Неактивен

 

#2 26.04.2011 01:45:08

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Сортировка в запросе

.. order by sortname desc, posicion, `date`;

Неактивен

 

#3 26.04.2011 09:26:57

alex4
Участник
Зарегистрирован: 25.04.2011
Сообщений: 3

Re: Сортировка в запросе

vasya написал:

.. order by sortname desc, posicion, `date`;

Тогда сортировка будет по sortname а внутри блока sortname по posicion, date
что в общем то правильно но нужночтобы сами блоки sortname выстроились сортируясь по posicion (от наименьшего к большему)
order by sortname desc, posicion, `date`
даст такую картину
sortname_b
-- name 4  (posicion = 3)
-- name 11  (posicion = 3)
-- name 6  (posicion = 4)
-- name 5  (posicion = 5)
-- name 10  (posicion = 7)
sortname_f
-- name 7  (posicion = 1)
-- name 8  (posicion = 3)
-- name 9  (posicion = 9)
sortname_w
-- name 1 (posicion = 1)
-- name 2 (posicion = 1)
-- name 3  (posicion = 8)

а нужно
sortname_w
-- name 1 (posicion = 1)
-- name 2 (posicion = 1)
-- name 3  (posicion = 8)
sortname_f
-- name 7  (posicion = 1)
-- name 8  (posicion = 3)
-- name 9  (posicion = 9)
sortname_b
-- name 4  (posicion = 3)
-- name 11  (posicion = 3)
-- name 6  (posicion = 4)
-- name 5  (posicion = 5)
-- name 10  (posicion = 7)

т.е. нужно задать порядок вывода блоков sortname (внутри кооторых уже сортировать по posicion, date) исходя из наменьшего posicion
как видно в примере первым вышел sortname_w потому что запись с  наименьшей posicion и наибольшей date имеет занчение  sortname ранвыным  sortname_w далее уже выводятся вс запсии с этим  sortname, после следующий  sortname с вторым наименьшим числом posicion и вторым наибольшим date
order by sortname desc просто выстроит все блоки sortname по алфавиту в обратном порядке, а вот как сделать то что нужно я увы и не поймуsad

Неактивен

 

#4 26.04.2011 19:55:26

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Сортировка в запросе

А почему w раньше, чем f? Мне больше нравится f в начале (там тоже есть 1).
ну и для симметрии:
А почему f раньше, чем b? Мне больше нравится f в конце (там есть 9).

Неактивен

 

#5 26.04.2011 22:13:19

alex4
Участник
Зарегистрирован: 25.04.2011
Сообщений: 3

Re: Сортировка в запросе

paulus написал:

А почему w раньше, чем f? Мне больше нравится f в начале (там тоже есть 1).
ну и для симметрии:
А почему f раньше, чем b? Мне больше нравится f в конце (там есть 9).

потому что та еще критерий дата, между равными 1 сортируется по дате
и сортируется по первому наименьшему значнию позиции, или наибольшему дате (если позиции равны)

Отредактированно alex4 (26.04.2011 22:16:55)

Неактивен

 

#6 27.04.2011 01:28:39

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Сортировка в запросе

Видимо, всё-таки, не бросилось в глаза sad

у f есть повод быть как первой, так и последней. Одновременно. Независимо
от даты — у нее максимальная позиция. И минимальная. b должна быть (только
по позициям, с любыми датами) между f и f smile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson