![]()  | 
		
Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте
Необходим совет более опытных разработчиков ![]()
Ситуация вот в чем
Имеем таблицу в которой есть поля
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?
Неактивен

.. order by sortname desc, posicion, `date`;
Неактивен
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 по алфавиту в обратном порядке, а вот как сделать то что нужно я увы и не пойму![]()
Неактивен

А почему w раньше, чем f? Мне больше нравится f в начале (там тоже есть 1).
ну и для симметрии:
А почему f раньше, чем b? Мне больше нравится f в конце (там есть 9).
Неактивен
paulus написал:
А почему w раньше, чем f? Мне больше нравится f в начале (там тоже есть 1).
ну и для симметрии:
А почему f раньше, чем b? Мне больше нравится f в конце (там есть 9).
потому что та еще критерий дата, между равными 1 сортируется по дате
и сортируется по первому наименьшему значнию позиции, или наибольшему дате (если позиции равны)
Отредактированно alex4 (26.04.2011 22:16:55)
Неактивен

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