2015-07-03 9 views
2

У меня есть список идентификаторов 31165,31160,31321,31322,31199,31136, который является динамическим.sqlite query unsorted result

Когда я запускаю запрос,

select id,name from master_movievod where id in(31165,31160,31321,31322,31199,31136); 

я получаю следующий результат

31136|Independence Day 
31160|Planet of the Apes 
31165|Mrs. Doubtfire 
31199|Moulin Rouge 
31321|Adult Movie 2 
31322|Adult Movie 3 

Это отсортированный список в порядке возрастания.

Я хочу, чтобы список в том же порядке, который я даю в качестве входных данных, как

31165|Mrs. Doubtfire 
31160|Planet of the Apes 
31321|Adult Movie 2 
31322|Adult Movie 3 
31199|Moulin Rouge 
31136|Independece Day 

ответ

1

Без order by оговорки, нет никакой гарантии на заказ базы данных возвращает результаты для вас. SQLite, к сожалению, не имеет что-то вроде MySQL, field для пользовательской сортировки, но вы можете отмычка-Rig то с case выражением:

SELECT id, name 
FROM  master_movievod 
WHERE id IN (31165, 31160, 31321, 31322, 31199, 31136) 
ORDER BY CASE ID WHEN 31165 THEN 0 
       WHEN 31160 THEN 1 
       WHEN 31321 THEN 2 
       WHEN 31322 THEN 3 
       WHEN 31199 THEN 4 
       WHEN 31136 THEN 5 
      END ASC 
1

К сожалению, SQLite не вариант, как в MySQL FIELD для выполнения пользовательского заказа. Осталось два варианта. Во-первых, вы можете создать пользовательскую таблицу, содержащую требуемый заказ, и использовать ее для сортировки. Этот вариант не очень привлекателен. Второй (и проще) вариант заключается в использовании ORDER BY CASE для достижения заказа вы хотите:

SELECT id, name FROM master_movievod 
WHERE id IN (31165,31160,31321,31322,31199,31136) 
ORDER BY 
    CASE id 
     WHEN 31165 THEN 0 
     WHEN 31160 THEN 1 
     WHEN 31321 THEN 2 
     WHEN 31322 THEN 3 
     WHEN 31199 THEN 4 
     WHEN 31136 THEN 5 
    END ASC