2013-08-15 1 views
1

Это мой запрос в MySQL:.Сортировка результатов, в котором он был прочитан в использовании в()

SELECT school_id, first_name, last_name, email, blog_username, comment_username 
FROM table 
WHERE user_id IN (100, 3,72) ; 

Результаты показывают два user_id годов в порядке возрастания. Как я могу сделать это так, чтобы он был заказан, в котором был получен?

Итак, вместо 3, 72, 100 Я хочу, чтобы результаты были 100, 3, 72.

ответ

2
Select school_id, first_name, last_name, email, blog_username, comment_username 
From table 
Where user_id IN (100, 3, 72) 
Order By Case 
      When user_id = 100 Then 1 
      When user_id = 3 Then 2 
      When user_id = 72 Then 3 
      End Asc 

Дополнение Объяснение:

Что разыскивается является возможность заказать строки в пользовательской форме. С другой стороны, нам нужно добавить пользовательскую мощность к набору значений, которые не соответствуют стандартной мощности. Для этого можно использовать выражение Case. Другой способ сделать то же самое будет:

Select school_id, first_name, last_name, email, blog_username, comment_username 
From table 
    Join (
     Select 100 As user_id, 1 As Sort 
     Union All Select 3, 2 
     Union All Select 72, 3 
     ) As Seq 
     On Seq.user_id = table.user_id 
Order By Seq.Sort 
+0

Можете ли вы рассказать о том, как и почему это решение работает, чтобы решить вопрос? –

+0

@Denomales - Готово. По сути, я использую выражение Case для вычисления новой мощности для значений. Выражение Case действует как преобразование, которое преобразует список значений в их значение мощности. – Thomas

+0

Прохладный, спасибо. Это похоже на довольно прочное решение. –

0

MySQL имеет функцию FIELD(), которая подходит для этого:

ORDER BY FIELD(user_id, 100, 3, 72) 

http://dev.mysql.com/doc/refman/5.6/en/string-functions.html#function_field

и в целом (метод предназначен для strings но он будет работать нормально с цифрами)

ORDER BY FIELD(field_name, value_1, value_2, ...) 

Однако

  • Это делает ваш SQL менее портативным
  • заказ, как это намного менее эффективен

весь коду

SELECT school_id, first_name, last_name, email, blog_username, comment_username 
    FROM table 
    WHERE user_id IN (100, 3, 72) 
    ORDER BY FIELD(user_id, 100, 3, 72) 

Хотя я бы рассмотреть вопрос об изменении Остальной коды поэтому вам не нужно использовать этот метод.

Смежные вопросы