2012-04-09 50 views
11

我需要一個SQLite查詢,只使用LIKE搜索1個字段。SQLite LIKE&ORDER BY匹配查詢

基本例如:

SELECT name FROM table WHERE name LIKE "%John%" ORDER BY name LIMIT 10; 

的問題是,我想要的結果,以這種方式進行排序:

  1. 如果該字段是相等的(例如,「約翰」)
  2. 如果該字段以「John」開頭(例如「John Doe」)
  3. 如果該字段包含「John」(例如「Jane John Doe」)

以下查詢達到了預期的結果,但是慢:

SELECT name FROM table WHERE name LIKE "%John%" ORDER BY CASE WHEN name = "John" 
THEN 1 ELSE 2 END, CASE WHEN name LIKE "John%" THEN 1 ELSE 2 END, name LIMIT 10; 

上面的查詢是較慢的(或I測試它不正確地)比使用3個獨立的查詢(一個針對完全匹配,一個用於的替代以及包含一個)。

有沒有其他的選擇?

回答

14

嘗試這種方式:

SELECT name 
FROM table 
WHERE name LIKE "%John%" 
ORDER BY (CASE WHEN name = "John" THEN 1 WHEN name LIKE "John%" THEN 2 ELSE 3 END),name LIMIT 10 ; 
6

應該足以訂購您等價測試:從左至右

ORDER BY name = "John" DESC, name LIKE "John%" DESC 

ORDER BY子句進行評估。