我有动态的31165,31160,31321,31322,31199,31136
列表。
当我运行查询
时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
答案 0 :(得分: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
答案 1 :(得分:1)
如果没有order by
子句,则无法保证数据库将结果返回给您。遗憾的是,SQLite没有像MySQL的field
这样的自定义排序,但是你可以使用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