Từ tài liệu của MySQL :
Về cơ bản, lần duy nhất một ORDER
trong một liên minh sẽ rất hữu ích nếu bạn đang sử dụng LIMIT
nữa.
Vì vậy, nếu bạn truy vấn như thế này:
(SELECT * FROM `jokes` WHERE `flags` < 5 AND (`title` LIKE "%only three doors%" OR `joke` LIKE "%only three doors%") ORDER BY `ups` DESC,`downs` ASC LIMIT 10)
UNION ...
Sau đó, bạn sẽ thấy mười bản ghi đầu tiên sẽ được trả về dựa trên thứ tự đó, nhưng chúng không nhất thiết phải được hiển thị theo thứ tự.
CẬP NHẬT:
Hãy thử điều này -
(SELECT *, 1 as ob FROM `jokes` WHERE `flags` < 5 AND (`title` LIKE "%only three doors%" OR `joke` LIKE "%only three doors%") )
UNION
(SELECT *, 2 as ob FROM `jokes` WHERE `flags` < 5 AND (`title` LIKE "%only%" OR `joke` LIKE "%only%") )
UNION
(SELECT *, 3 as ob FROM `jokes` WHERE `flags` < 5 AND (`title` LIKE "%three%" OR `joke` LIKE "%three%") )
UNION
(SELECT *, 4 as ob FROM `jokes` WHERE `flags` < 5 AND (`title` LIKE "%doors%" OR `joke` LIKE "%doors%"))
ORDER BY `ob`, `ups` DESC,`downs` ASC LIMIT 0, 30