Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLite Order by WHERE IN子句_Sqlite_Android Sqlite_Sql Order By_Where In_Activeandroid - Fatal编程技术网

SQLite Order by WHERE IN子句

SQLite Order by WHERE IN子句,sqlite,android-sqlite,sql-order-by,where-in,activeandroid,Sqlite,Android Sqlite,Sql Order By,Where In,Activeandroid,我正在使用SQLite并提供一个要检索的id值列表。但是,这些id值的顺序很重要,我希望以相同的顺序检索记录 比如说, SELECT * FROM todos WHERE todos.id in ( 1, 3, 2, 4 ) 这将返回: 1 2 3 4 但我希望它以与提供的id值相同的顺序返回,如下所示: 1 3 2 4 我已经看到了MySQL和PostgreSQL的答案,但没有看到SQLite的答案。当x然后y时,按案例id排序 在一个盒子里找到的 有一种简洁的方法

我正在使用SQLite并提供一个要检索的
id
值列表。但是,这些
id
值的顺序很重要,我希望以相同的顺序检索记录

比如说,

SELECT 
  * 
FROM 
  todos
WHERE 
  todos.id in ( 1, 3, 2, 4 ) 
这将返回:

1
2
3
4
但我希望它以与提供的
id
值相同的顺序返回,如下所示:

1
3
2
4
我已经看到了MySQL和PostgreSQL的答案,但没有看到SQLite的答案。

当x然后y时,按案例id排序 在一个盒子里找到的

有一种简洁的方法可以对事物进行排序,这种方法非常具体,但易于通过编程生成

要实现所需的顺序,可以使用以下命令:

SELECT 
  * 
FROM 
  todos
WHERE 
  todos.id in ( 1, 3, 2, 4 ) 
ORDER BY 
  CASE todos.id  
  WHEN 1 THEN 1 
  WHEN 3 THEN 2 
  WHEN 2 THEN 3 
  WHEN 4 THEN 4
  END
这将按以下顺序返回记录:

1
3
2
4
如您所见,您正在手动指定每条记录的顺序。如果您手动执行此操作,这将非常困难,但是如果您使用的是编程语言,则可以轻松地对其进行编程并将其附加到查询中

例如,我在Android/Java中使用了这个方法,并最终生成了这个
orderby
子句:

String orderBy = "CASE todos.id ";

int i = 1;
for ( int id : ids ) {
    orderBy = orderBy.concat( " WHEN " + id + "' THEN " + i );
    i++;
}

orderBy = orderBy.concat( " END");

// Append `orderBy` to your normal SQLite query.