2013-09-01 4 views
0

Есть ли способ заказать результат запроса по массиву ввода?Заказать? где col IN array

SELECT * FROM target_table WHERE id IN (4,2,6,1) ORDER BY ??? 

Как вы можете заметить, что это даст вам порядок результата по target_table идентификаторов и нет необходимости во входном массиве (4,2,6,1), есть ли способ решить эту проблему?

+2

возможно дублировать значения [MySQL - ORDER BY внутри IN()] (http://stackoverflow.com/questions/958627/mysql-order-by-values-within-in) – MarcinJuraszek

+0

Попробуйте использовать функцию «FIELD» –

ответ

2

Вы можете повторить массив в order by:

SELECT * 
FROM target_table 
WHERE id IN (4, 2, 6, 1) 
ORDER BY field(id, 4, 2, 6, 1); 

Если вы хотите, чтобы перечислить номера один раз, вы можете поместить значение в select списке и использовать having:

SELECT t.*, field(id, 4, 2, 6, 1) as ival 
FROM target_table t 
HAVING ival > 0 
ORDER BY ival;