Вы пытались решить проблему с клейкой лентой?
Попробуйте определить, когда возникают ошибки, и исправьте их короткими операторами if, это не очень, но для некоторых проблем это единственное решение, и это один из них .
if( (n * 0.1) < 100.0 ) { return n * 0.1 - 0.000000000000001 ;}
else { return n * 0.1 + 0.000000000000001 ;}
У меня была такая же проблема в проекте научной симуляции в c #, и я могу сказать вам, что если вы проигнорируете эффект бабочки, он превратится в большого толстого дракона и укусит вас в a **
select id,name
from friends
order by id=5 desc
(если вас не беспокоит порядок остальных, в противном случае, например, останутся по id asc )
select id,name
from friends
order by id=5 desc, id asc
Я не могу получить доступ к MySQL для тестирования, поэтому он может быть отменен ... но вы можете использовать тот факт, что Booleans также сортируют и могут иметь несколько полей сортировки.
SELECT ... ORDER BY id != 5, id
(вам, возможно, придется писать id = 5
, я не могу вспомнить, сортируют ли TRUE до или после FALSE.)
EDIT: О, я просто прочитал, что вас не волнует порядок остальное, и в этом случае я сердечно рекомендую @ Ричарду ответить.
Попробуйте следующее:
select id,name
from friends
order by case when id=5 then -1 else id end
, если у вас есть больше одного, которое вы можете сделать:
select id,name
from friends
order by case when id in (5,15,25) then -1 else id end,id
Вы должны использовать предложение ORDER BY FIELD MySQL, чтобы решить эту проблему. Хотя, ответ был принят по этому вопросу, вот лучшее решение.
select 1 id, 'Zeta' order_col union all
select 2 id, 'Alpha' order_col union all
select 3 id, 'Gamma' order_col union all
select 4 id, 'Phi' order_col union all
select 5 id, 'Delta' order_col union all
select 6 id, 'Delta' order_col union all
select 7 id, 'Alpha' order_col union all
select 8 id, 'Gamma' order_col union all
select 9 id, 'Zeta' order_col union all
select 10 id, 'Phi' order_col
order by field (order_col, 'Alpha', 'Gamma', 'Phi', 'Delta', 'Zeta'), id;
Это лучше, чем
Если вы хотите сделать то же самое для запроса UNION, например, если у вас есть:
select id,name
from friends
UNION
select id,name
from friends
order by id=5 desc
... вы получите исключение в PostgreSQL:
Можно использовать имена столбцов только результата, а не выражения или функции. СОВЕТ: добавьте выражение / функцию к каждому SELECT или переместите UNION в предложение from
. Чтобы обойти это, вы должны использовать следующее:
select id,name, (id=5) AS is_five
from friends
UNION
select id,name, (id=5) AS is_five
from friends
order by is_five DESC, id DESC
Выражение (id = 5) вернет 't' ИЛИ 'f', в зависимости от того, равно ли значение вашего столбца или нет ожидаемому значению (5), поэтому порядок сначала будет упорядочивать столбцы 't', затем остальные.
Это немного уродливо, потому что у него есть дублирование кода, но он делает трюк:
select .... where id = 5
union
select .... where not id = 5