sqlite查询未排序的结果

时间:2015-07-03 06:13:27

标签: sql linux database sqlite

我有动态的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

2 个答案:

答案 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