PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Postgres:Pesan berdasarkan kolom string dengan nilai yang diketahui

1.Jika Anda hanya membutuhkan sql di postgres, ini dia :

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)    

anda dapat mengubah urutan status dalam sql, tidak perlu mengubah kode ruby, mainkan biola sql:http://sqlfiddle.com/#!12/976e9/3 .

2. Dalam saran mu, Anda dapat menggunakan jenis enum, lebih efisien, jika Anda perlu mengubah urutan, Anda dapat membuat ulang enum. lihat biola sql ini: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. Dengan cara ruby ​​​​murni, Anda dapat mendefinisikan hash:

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.Tapi menurut saya, Anda harus menambahkan tabel bernama "status", dengan kolom "nama" dan "urutan", dan tentukan urutannya dalam "urutan". Bergabung dengan "peristiwa" dan "negara" kemudian. Saat Anda mengubah urutan, Anda tidak perlu mengubah kode.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Query:Ambil baris yang dipesan dari tabel

  2. Fungsi pengembalian set tidak diizinkan di UPDATE saat menggunakan Postgres 10

  3. Perbedaan antara substring di Postgresql

  4. PostgreSQL mengubah cap waktu jenis tanpa zona waktu -> dengan zona waktu

  5. Postgres - Tarik salinan seluruh DB dari server jauh, ke mesin pengembang lokal