Сортировка с условием и изменением порядка

Avenus

Under Glory Yield
x-yuri, GROUP BY убрал... сделал без него пока.
Только я не пойму, что ты имеешь в виду:
имелось в виду 'ORDER BY read, date DESC', только read = (from!='myid' AND read=0)
Если это вставить в запрос:
PHP:
ORDER BY read=(from!='myid' AND read=0), date DESC
то все равно сортирует неверно... также как и до этого:
сначала новые непрочтенные мной - верно, но остальные по date desc не сортирует, выводит сначала старее, потом новее... :(

-~{}~ 26.02.09 02:01:

Т.е. так:
| date | from | to | read
2009-02-21 | notmyid | myid | 0 - верно
2009-02-22 | myid | notmyid | 1 - должно быть последним
2009-02-23 | myid | notmyid | 0 - должно быть вторым
 

x-yuri

Новичок
а ты подумай, что я тебе сказать пытаюсь, а не занимайся копи-пастом. Перечитай еще раз топик ;-) У тебя вполне достаточно уже информации
 

Avenus

Under Glory Yield
ха :) надо было просто сделать так:
PHP:
SELECT *,IF(условие, поле1, "[B]поле2 DESC[/B]") as сортировка ... ORDER BY сортировка, поле2 DESC
То, что выделено жирным, в кавычки взять вместе с DESC.
Все, проблема решена!

-~{}~ 26.02.09 02:12:

x-yuri, сказал бы прямо, без намеков ;)
Спасибо всем!
 

x-yuri

Новичок
а ты понимаешь, как твой запрос работает? Что изменится если заменить "поле2 DESC" -> "поле2" или просто на единицу?
 

Avenus

Under Glory Yield
x-yuri, как я понимаю... числом можно указать номер поля, вместо названия. А вот, в кавычках получается чтобы пробела не было между поле2 и DESC :)
Иначе ошибку выдает...
Объясни, если не сложно, что к чему... потому как работает.
 

x-yuri

Новичок
Как происходит сортировка по нескольким столбцам (ORDER BY a, b...) - сначала сравниваются значения в столбце a. Если они одинаковые - то сравниваются значения в столбце b и т.д.
Посмотри на результат твоего запроса и подумай, почему сорттируется как надо
если в IF указано число, то это - число, а не номер столбца; если строка (в кавычках) - то это строка, строка без кавычек - название столбца
p.s. ведь если заменить на "поле2" или на 1, то тоже работает?
 

iceman

говнокодер
Avenus
делай под запрос, там сортируй по дате и в самом запросе отсортируй по read

Код:
SELECT * FROM (SELECT * FROM xxx ORDER BY date DESC) ORDER BY read
 
Сверху