Sắp xếp kết quả truy vấn trong MySql theo giá trị đặc biệt của một trường

08:35 20/03/2018   Trịnh Tuấn Tài

Trong MySQL chúng ta có thể sắp xếp các kết quả theo thứ tự tăng dần hoặc giảm dần một cách rất dễ dàng bằng cách sử dụng mệnh đề ORDER BY. Tuy nhiên, có những lúc bạn muốn sắp xếp các kết quả theo thứ tự cụ thể mà không thể thực hiện bằng cách sử dụng ASC hoặc DESC. Hàm FIELD() của mệnh đề MySQL ORDER BY có thể được sử dụng để sắp xếp các kết quả theo thứ tự cụ thể.

Trong bài viết này sẽ sử dụng một bảng cơ sở dữ liệu mẫu để mô tả, bảng này sẽ chứa thông tin tên của các loài vật và chủng loại của chúng. Tôi muốn lấy chúng theo thứ tự dog, cat, snake và bird, tôi sẽ không thể sử dụng MySQL ORDER BY để lấy các kết quả theo thứ tự này. Bằng cách sử dụng hàm FIELD() của mệnh đề MySQL ORDER BY tôi có thể nhận được kết quả theo thứ tự tôi cần. Đây là truy vấn tôi có thể sử dụng:

SELECT name, species FROM `pet`
ORDER BY FIELD(species, 'dog','cat','snake','bird'), name ASC

Truy vấn này sẽ trả lại cho tôi những kết quả được sắp đặt bởi các loài theo thứ tự tôi cần và sau đó sắp xếp nó theo tên. Đây là kết quả:

name species
Bowser dog
Buffy dog
Fang dog
Claws cat
Fluffy cat
Slim snake
Chirpy bird
Whistler bird

 

Giải pháp trên hoạt động tốt với các giá trị được liệt kê trong hàm FIELD(). Trong trường hợp tiếp theo chúng ta hãy thử với mục đích đặc biệt hơn, chúng ta sẽ sắp xếp kết quả theo dog và cat lên trước, các loại khác sẽ ở phía sau theo mặc định:

SELECT name, species FROM `pet` 
ORDER BY FIELD(species, 'cat','dog') DESC , name ASC

Truy vấn này sẽ cho chúng ta những kết quả sau:

name species
Bowser dog
Buffy dog
Fang dog
Claws cat
Fluffy cat
Chirpy bird
Slim snake
Whistler bird

 

Lưu ý rằng các kết quả được sắp xếp theo dog và cat lên trước, nhưng không phải các kỳ loài khác. Nếu chúng ta cần có các kết quả khác cũng sắp xếp theo loài chúng ta có thể sử dụng truy vấn sau:

SELECT name, species FROM `pet` 
ORDER BY FIELD(species, 'cat','dog') DESC, species ASC, name ASC

Bây giờ truy vấn này trả lại cho chúng ta các kết quả sau:

name species
Bowser dog
Buffy dog
Fang dog
Claws cat
Fluffy cat
Chirpy bird
Whistler bird
Slim snake

 

Tất cả các truy vấn trên không có trong tài liệu cụ thể của MySQL tuy nhiên tôi đã thử và chúng hoạt động tốt trên MySQL 5.6. Nếu có góp ý gì cho bài viết bạn hãy để lại dưới phần bình luận nhé.