2013-03-07 3 views
0

У меня есть запрос:MYSQL: порядок по поисковому запросу IN функция?

SELECT * FROM products WHERE id IN (1,2,3) 

Это возвращает:

ID | Title 
1 | Bla 
2 | Bla2 
3 | Bla3 

Если изменить запрос:

SELECT * FROM products WHERE id IN (2,3,1) 

Я все еще получаю:

ID | Title 
1 | Bla 
2 | Bla2 
3 | Bla3 

Как я могу менять e мой запрос:

ID | Title 
2 | Bla2 
3 | Bla3 
1 | Bla 

Для второго запроса? Другими словами, упорядочить результат по порядку элементов в запросе IN? Можно ли что-то сказать:

ORDER BY ID (2,3,1) 

?

ответ

3

Вы могли бы использовать что-то вроде этого:

SELECT * 
FROM products 
WHERE id IN (2,3,1) 
ORDER BY FIND_IN_SET(id, '2,3,1') 

Или вы также можете заказать по:

ORDER BY FIELD(id, 3,2,1) 

Пожалуйста, смотрите скрипку here.

0

вы должны использовать ORDER BY <ASC/DESC>

SELECT * FROM products WHERE id IN (1,2,3) order by id desc 
+0

Это действительно так просто –

+0

@JohnConde Да сэр, иногда мы не можем видеть простые вещи – jcho360

+0

Что делать, если Я делаю это: SELECT * FROM products WHERE id IN (2,3,1) -> это мое беспокойство ... – coderama

3

Вы можете использовать выражение CASE в вашем предложении ORDER BY:

SELECT * 
FROM products 
WHERE id IN (2,3,1) 
order by 
    case id 
    when 2 then 0 
    when 3 then 1 
    when 1 then 2 
    else 3 
    end 

См SQL Fiddle with Demo

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