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