Tôi cần truy vấn SQLite để tìm kiếm 1 trường chỉ sử dụng LIKE.GIỐNG NHƯ & ĐẶT HÀNG theo yêu cầu kết hợp
dụ cơ bản:
SELECT name FROM table WHERE name LIKE "%John%" ORDER BY name LIMIT 10;
Vấn đề là tôi muốn kết quả được sắp xếp theo cách này:
- Nếu trường là bằng nhau (ví dụ: "John")
- Nếu trường bắt đầu bằng "John" (ví dụ: "John Doe")
- Nếu trường có chứa "John" (ví dụ: "Jane John Doe")
Các truy vấn sau đây đạt được kết quả mong đợi, nhưng là chậm:
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;
Truy vấn trên là chậm (hoặc tôi thử nghiệm nó không chính xác) hơn thay thế của việc sử dụng 3 truy vấn riêng biệt (một trận đấu chính xác, một cho bắt đầu và một cho chứa).
Có lựa chọn thay thế nào khác không?