Nhà điều hành UNION
thực hiện một loại được ngụ ý như một phần của hoạt động công đoàn (IIRC, trên cột chính).
Nếu bạn muốn sắp xếp khác trong kết quả, bạn phải áp dụng ORDER BY
cho lựa chọn được kết hợp.
Trong trường hợp của bạn, bạn cần một số cách để phân biệt giữa lựa chọn đầu tiên và lựa chọn thứ hai, để bạn có thể đặt hàng công đoàn đúng cách. Một cái gì đó tương tự (chưa được kiểm tra):
(SELECT table1.*, 0 AS TMP_ORDER FROM table1 ORDER BY fieldA ASC LIMIT 3)
UNION
(SELECT table1.*, 1 AS TMP_ORDER FROM table1)
ORDER BY TMP_ORDER ASC,
CASE WHEN TMP_ORDER = 0 THEN fieldA ELSE 0 END ASC,
CASE WHEN TMP_ORDER = 1 THEN fieldB ELSE 0 END DESC
Vấn đề với phương pháp này là bạn sẽ có bản sao cho ba hàng lựa chọn như là một phần của truy vấn đầu tiên trong UNION
(kể từ khi các cột không hoàn toàn phù hợp).
Bạn có chắc chắn không thể sử dụng hai số liệu SELECT
thay thế không?
Nguồn
2010-07-04 16:11:58
Xem [UNION Cú pháp] (http://dev.mysql.com/doc/refman/5.0/en/union.html) . Tìm 'sử dụng ORDER BY cho các câu lệnh SELECT riêng lẻ ngụ ý không có gì về thứ tự'. Ngoài ra, hãy xem [bài đăng SO này] (http://stackoverflow.com/questions/3163503/sorting-union-queries-in-mysql/3163526#3163526). – Mike
wow, nó hoạt động ... nhưng nó có thể hoạt động như thế nào? mmm .. Tôi hơi bối rối ..! – stighy