2011-01-10 2 views
3

Есть ли способ заказать заказ по заказу в sqlite?Пользовательский заказ в sqlite

Для меня, например, по существу, перечисление

 
_id|Name|Key 
------------ 
1 | One | Named 
2 | Two | Contributing 
3 | Three | Named 
4 | Four | Key 
5 | Five | Key 
6 | Six | Contributing 
7 | Seven | Named 

И «ключ» столбцы имеют порядок. Say Key> Named> Contributing.

Есть ли способ сделать

SELECT * FROM table ORDER BY Key

вернуть что-то к эффекту

 
_id|Name|Key 
------------ 
4 | Four | Key 
5 | Five | Key 
1 | One | Named 
3 | Three | Named 
7 | Seven | Named 
2 | Two | Contributing 
6 | Six | Contributing 

этого?

+0

Возможный дубликат [SQLite и нестандартный заказ по] (https://stackoverflow.com/questions/3303851/sqlite-and-custom- order-by) –

ответ

9
SELECT _id, Name, Key 
    FROM my_table t 
ORDER BY CASE WHEN key = 'Key' THEN 0 
       WHEN key = 'Named' THEN 1 
       WHEN key = 'Contributing' THEN 2 END, id; 
2

Если у вас много CASE (или сложного набора условий), решение Адама может привести к чрезвычайно большому запросу.

SQLite позволяет вам создавать собственные функции (на C++). Вы можете написать функцию для возврата значений, аналогичных тому, как это сделал Адам, но поскольку вы используете C++, вы можете работать с гораздо большим набором условий (или отдельной таблицей и т. Д.).

После того, как функция написана, вы можете обратиться к нему в селектов, как если бы это была встроенная функция:

SELECT * FROM my_table ORDER BY MyOrder (Key)

+0

Это на самом деле на Android. Вы знаете, возможно ли это для Android? – Falmarri

+0

Вы программируете на C++ или на каком-то другом языке? AFAIK, все платформы построены из одного исходного кода C, поэтому, вероятно. Sqlite3_create_function() используется для «регистрации» вашей функции с помощью SQLite (один из ее параметров - указатель на вашу функцию C). После регистрации вы можете использовать новую функцию в своих операторах SQL. –

+0

hey Marc Bernier может помочь мне, представив пример, как создать пользовательскую функцию и использовать функцию sqlite, которую я ищу на сайте sqlite, но ничего не понял. –

0

Пробовали ли вы (не тестируется на моей стороне, но полагаться на технику, я уже использовал):

ORDER BY KEY = "Key" DESC, 
     KEY = "Named" DESC, 
     KEY = "Contributing" DESC 
Смежные вопросы