Bạn đang đi đúng hướng. Chỉ cần thêm một order by
:
SELECT street, zip, city
FROM address
WHERE street LIKE 'Test%' OR ord = 0
ORDER BY (CASE WHEN street LIKE 'Test%' THEN 1 ELSE 0 END) DESC
LIMIT 1;
Hoặc, cách khác:
ORDER BY ord DESC
Một trong hai cách này sẽ đặt ord = 0
hàng cuối cùng.
CHỈNH SỬA:
Erwin đưa ra một điểm tốt rằng từ quan điểm sử dụng chỉ mục, một OR
trong WHERE
mệnh đề không phải là cách tiếp cận tốt nhất. Tôi sẽ sửa đổi câu trả lời của mình thành:
SELECT *
FROM ((SELECT street, zip, city
FROM address
WHERE street LIKE 'Test%'
LIMIT 1
)
UNION ALL
(SELECT street, zip, city
FROM address
WHERE ord = 0
LIMIT 1
)
) t
ORDER BY (CASE WHEN street LIKE 'Test%' THEN 1 ELSE 0 END) DESC
LIMIT 1;
Điều này cho phép truy vấn sử dụng hai chỉ mục (street
và ord
). Lưu ý rằng điều này thực sự chỉ vì LIKE
mẫu không bắt đầu bằng ký tự đại diện. Nếu LIKE
mẫu bắt đầu bằng ký tự đại diện, sau đó biểu mẫu này của truy vấn sẽ vẫn quét toàn bộ bảng.