Сложная сортировка в MySQL

182
.
Здравствуйте. У меня есть таблица, в которой есть столбец со значениями (1), (-1) и (NULL). Скобочки для наглядности. Возможен ли такой запрос который отсортирует данные как (1)-(NULL)-(-1) ибо при простой сортировке он сортирует конечно же как (1)-(-1)-(NULL). Спасибо.
.
Решил сам
SELECT * FROM `table_name` WHERE type='vote' ORDER BY FIELD(value, '1','NULL','-1');
.
Только с Join'ном что-то не выходит
.
Всё сделал. Чо писал. Спят ещё все.
.
Хотя такая сортировка не канает при джойне, когда я складываю две таблички по айдишникам, у некоторых ещё айдишников нет. И тут то сортировка обламывается.
.
аkа ПьяНый Ангел
почему бы не NULL не заменить на 0? Сделай для поля default '0'
.
аkа ПьяНый Ангел
SlyDeath (11.05.2012/08:18)
Хотя такая сортировка не канает при джойне, когда я складываю две таблички по айдишникам, у некоторых ещё айдишников нет. И тут то сортировка обламывается.
что ты там складываешь то, скинь пример кода, нагляднее будет
.
FlySelf, Дело в том, что система рейтинга запилина в систему давно и она общая. И мне лишь остаётся написать свой метод работающий на его основе. И вышло так, что >0 это плюсики, <0 минусики, а NULL ничего - это ведь всё логично. Но так как join идёт по id'шникам то соответственно и те, что <0 тоже впереди, впереди NULL на что ты его не поменяй. Пример запроса:
SELECT SQL_CALC_FOUND_ROWS * FROM `order_feedbacks` AS `of` 
LEFT JOIN `voting_rate` AS `vr` ON (vr.nid = of.order_id)

Либо join должен быть хитрым, либо это просто нереально сделать. Хотя насколько я знаю MySQL довольно мощная система.
.
Есть два поля. В одном общее количество плюсов (up) в другом минусов (down). Вот мне надо все плюсы выцепить и сортировать по DESC, а минусы сортировать по time как-будто за них и не голосовали вообще. Одним запросом.
.
Решено созданием столбика с весом с помощью CAST, вычитанием значения up - down.
SELECT * , 
IFNULL(CAST(`vr`.`up` AS SIGNED ) - CAST(`vr`.`down` AS SIGNED),0) AS `pos` 
FROM `order` AS  `of` 
LEFT JOIN  `rate` AS  `vr` ON ( vr.nid = of.order_id ) 
AND (vr.type =  'order')
WHERE (of.published =  'y')
ORDER BY `pos` DESC , `time` DESC 
LIMIT 0, 30
Всего: 10