PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Postgres:Sắp xếp theo cột chuỗi với các giá trị đã biết

1.Nếu bạn chỉ cần một sql trong postgres, đây là:

select * from events
order by (case state 
          when 'scheduled' then 1
          when 'notified' then 2
          when 'invited' then 3
          when 'started' then 4
          when 'ended' then 5 
          end)    

bạn có thể thay đổi thứ tự các trạng thái trong sql, không cần thay đổi mã ruby, chơi sql fiddle: http://sqlfiddle.com/#!12/976e9/3 .

2. Theo gợi ý của mu, bạn có thể sử dụng kiểu enum, nó hiệu quả hơn, nếu bạn cần thay đổi thứ tự, bạn có thể tạo lại enum. xem sql fiddle này: http://sqlfiddle.com/#!12/f6f3d/2

CREATE TYPE states AS ENUM ('invited', 'scheduled', 'notified', 'started', 'ended');
create table events(
  name varchar(100),
  state states
);

select * from events order by state;

3. Theo cách thuần khiết của ruby, bạn có thể định nghĩa một hàm băm:

test_hash = {'scheduled'=>1, 'notified'=>2, 'invited'=>3, 'started'=>4, 'ended'=>5}
Events.all.sort! {|x, y| test_hash[x.state] <=> test_hash[y.state]}

4.Nhưng theo ý kiến ​​của tôi, bạn nên thêm một bảng có tên là "trạng thái", với các cột "tên" và "trình tự", và chỉ định thứ tự trong "trình tự". Tham gia các "sự kiện" và "tiểu bang" sau đó. Khi bạn thay đổi đơn đặt hàng, bạn không cần phải thay đổi mã.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đạt được chuỗi tuần tự tối đa với các sự kiện

  2. Ký tự có mã hóa UTF8 không có mã tương đương trong WIN1252

  3. Postgres tương tự như ÁP DỤNG CHÉO trong SQL Server

  4. Cách đặt mật khẩu người dùng mặc định trong PostgreSQL

  5. Nhập một kết xuất postgresql vào Heroku