2012-04-09 20 views
11

Sadece LIKE kullanarak 1 alanını arama yapan bir SQLite sorgusuna ihtiyacım var.SQLite LIKE & ORDER BY Sorgulama sorgusu

Temel örnek: alanına (örneğin "John")

  • Eğer eşitse

    1. :

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

      Sorun sonuç bu şekilde sipariş edilmesi istememizdir alan "John" ile başlar (örn. "John Doe")

    2. Eğer alan "John" içeriyorsa (örneğin "Jane John Doe")

    aşağıdaki sorgu beklenen sonucu elde fakat yavaştır:

    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; 
    

    sorgu üzerinde 3 ayrı sorgular (tam eşleme için, biri için bir tane kullanma alternatif daha (ya da yanlış test) daha yavaş ile başlar ve içerir için bir).

    Başka alternatifler var mı? Bu şekilde

  • cevap

    14

    Dene:

    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

    Bu sizin denklik testlerinde sipariş yeterli olacaktır: soldan sağa

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

    SİPARİŞ BY deyimi değerlendirilir.

    İlgili konular