2010-05-10 45 views
2

在MySQL中,我的SQL就像下面無序結果SQLite中

SELECT * , IF(`Word` = 'sim', 1, IF(`Word` LIKE 'sim%', 2, IF(`Word` LIKE '%sim', 4, 3))) AS `sort` 
FROM `dblist` 
WHERE `Word` LIKE '%sim%' 
ORDER BY `sort` , `Word` 

這個SQL不是SQLite中工作。我想要做結果順序。

SELECT * FROM dblist where word like 'sim' or word like 'sim%' or word like '%sim%' or word like '%sim' 

等於sim是第一個,sim%是第二個,%sim%是第三個,然後%sim是最後一個。

目前我不能像mysql在sqlite中排序。如何更改sql來訂購結果?

+0

「這個SQL不工作」 - 你可以發佈你的錯誤?當你告訴我們究竟是什麼問題時,解決你的問題要容易得多。 – 2010-05-10 05:50:54

回答

3

您應該使用CASE expression而不是IF,因爲SQLite不支持後者。以下是你需要的SQL:

SELECT 
    *, 
    CASE WHEN `Word` = 'sim' THEN 1 
     WHEN `Word` LIKE 'sim%' THEN 2 
     WHEN `Word` LIKE '%sim' THEN 4 
     ELSE 3 
    END `sort` 
FROM `dblist` 
WHERE `Word` LIKE '%sim%' 
ORDER BY `sort` , `Word` 
+0

捕捉。 :)但是你的格式更好;) – 2010-05-10 05:52:10

+0

謝謝。我知道了。 – saturngod 2010-05-10 07:28:46

1
SELECT * , case when `Word` = 'sim' then 1 else case when `Word` LIKE 'sim%' then 2 else case when `Word` LIKE '%sim' then 4 else 3 end end end as sort 
FROM `dblist` 
WHERE `Word` LIKE '%sim%' 
ORDER BY `sort` , `Word