2012-04-09 16 views
11

LIKEを使用して1つのフィールドのみを検索するSQLiteクエリが必要です。SQLite LIKE&ORDER BY一致クエリ

Basicの例:

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; 

上記のクエリは、3つの別々のクエリ(完全一致のための1つ、のための1つを使用することの別のより遅い(または私は間違ってそれをテスト)であります1つはcontainsで始まります)。

他の選択肢はありますか?このように

答えて

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句が評価されています。

関連する問題