ĐẶT HÀNG bằng cách sử dụng các ưu tiên tùy chỉnh cho các cột văn bản


12

Đây là một bảng mẫu:

name | cat
----------
hugo | sal
bob  | mgr
mike | dev
jeff | mgr
john | dev

Cả hai namecatlà Varchar.

cat phản ánh một danh mục cho những tên này, nhưng tôi muốn gán mức độ ưu tiên cho chúng, theo sau là một truy vấn để liệt kê tất cả, được sắp xếp theo thứ tự ưu tiên này.

Những cách có thể? Tôi có thể giải nén catvào một bảng thứ hai, xây dựng một chìa khóa, vv ngoại Nhưng với ứng dụng của tôi rất đơn giản và cấu trúc có thể là không thể thay đổi: Những khả năng làm tôi phải liệt kê các mgrtên đầu tiên, tiếp theo là devtên, tiếp theo là saltên ?

Câu trả lời:


20

Giả sử bạn không thể thay đổi cấu trúc của mình, bạn có thể sử dụng câu lệnh CASE trong ĐẶT HÀNG B BYNG:

ORDER BY case cat when 'mgr' then 1 when 'dev' then 2 else 3

Tuy nhiên, nếu bạn có thể thay đổi cấu trúc của mình, bạn có thể tạo một Categorybảng bao gồm mã danh mục và xếp hạng, tham gia bảng mẫu của bạn vào Categorybảng và sắp xếp theo thứ hạng này.


3
ORDER BY (case when `cat` = 'mgr' then 1 
when `cat` = 'dev' then 2 
else 3 end)

Cấu trúc này giúp tôi trong Wordpress. Ví dụ: để chọn bài đăng tùy chỉnh trước tiên khác: poster và dự án là tùy chỉnh CHỌN post_typeTỪ wp_postsĐẶT HÀNG (trường hợp khi post_type= 'poster' sau đó 1 khi post_type= 'dự án' sau đó 2 kết thúc 3)


Lưu ý rằng a) dấu ngoặc là tùy chọn: một case biểu thức (vì cái này được gọi) là hợp lệ ở bất cứ nơi nào một cột có thể được chỉ định; và b) biểu thức có thể được đơn giản hóa một chút thànhcase `cat` when 'mgr' then 1 when 'dev' then 2 else 3 end
Colin 't Hart
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.