sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgres:Sorter efter strengkolonne med kendte værdier

1.Hvis du bare skal bruge en sql i postgres, så er den her :

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)    

du kan ændre rækkefølgen af ​​tilstande i sql, ingen grund til at ændre ruby-koden, spil sql violinen:http://sqlfiddle.com/#!12/976e9/3 .

2.I mu's forslag kan du bruge en enum type, det er mere effektivt, hvis du skal ændre rækkefølgen, kan du genskabe enum. se denne sql violin: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.På ren rubin måde kan du definere en 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.Men efter min mening bør du tilføje en tabel med navnet "stater", med kolonnerne "navn" og "sekvens", og angive rækkefølgen i "sekvens". Deltag i "begivenheder" og "stater" så. Når du ændrer ordren, behøver du ikke ændre koden.




  1. Sådan opdaterer du tabel med activeandroid efter tilføjelse af en ny kolonne

  2. Oracle :Eksporter udvalgt sætningsresultatsæt som INSERT SQL-sætninger svarende til SQL-udviklereksport

  3. Indsæt flere rækker i en MySQL-database fra en tabel

  4. Flytte MySql fra Windows-server til linux