Хотите создать собственный заказ с помощью mysqli [duplicate]

Вы пытались решить проблему с клейкой лентой?

Попробуйте определить, когда возникают ошибки, и исправьте их короткими операторами if, это не очень, но для некоторых проблем это единственное решение, и это один из них .

 if( (n * 0.1) < 100.0 ) { return n * 0.1 - 0.000000000000001 ;}
                    else { return n * 0.1 + 0.000000000000001 ;}    

У меня была такая же проблема в проекте научной симуляции в c #, и я могу сказать вам, что если вы проигнорируете эффект бабочки, он превратится в большого толстого дракона и укусит вас в a **

55
задан Matt O'Brien 8 March 2016 в 02:08
поделиться

6 ответов

select id,name 
from friends 
order by id=5 desc

(если вас не беспокоит порядок остальных, в противном случае, например, останутся по id asc )

select id,name 
from friends 
order by id=5 desc, id asc
109
ответ дан RichardTheKiwi 24 August 2018 в 01:52
поделиться

Я не могу получить доступ к MySQL для тестирования, поэтому он может быть отменен ... но вы можете использовать тот факт, что Booleans также сортируют и могут иметь несколько полей сортировки.

SELECT ... ORDER BY id != 5, id

(вам, возможно, придется писать id = 5, я не могу вспомнить, сортируют ли TRUE до или после FALSE.)

EDIT: О, я просто прочитал, что вас не волнует порядок остальное, и в этом случае я сердечно рекомендую @ Ричарду ответить.

3
ответ дан Amadan 24 August 2018 в 01:52
поделиться

Попробуйте следующее:

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
39
ответ дан Dumitrescu Bogdan 24 August 2018 в 01:52
поделиться

Вы должны использовать предложение 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;

Это лучше, чем

  • id = что-то, порядок по id asc
  • по порядку, когда что-то тогда 1, когда something_else then 2 end desc
0
ответ дан MontyPython 24 August 2018 в 01:52
поделиться

Если вы хотите сделать то же самое для запроса 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', затем остальные.

1
ответ дан Ucello 24 August 2018 в 01:52
поделиться

Это немного уродливо, потому что у него есть дублирование кода, но он делает трюк:

select .... where id = 5 
union
select .... where not id = 5
-5
ответ дан Yotam Omer 24 August 2018 в 01:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: