PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Postgres:Kolumna Uporządkuj według ciągu znaków ze znanymi wartościami

1. Jeśli potrzebujesz tylko sql w postgresie, oto on:

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)    

możesz zmienić kolejność stanów w sql, nie musisz zmieniać kodu ruby, graj na skrzypcach sql:http://sqlfiddle.com/#!12/976e9/3 .

2. Zgodnie z sugestią mu możesz użyć typu enum, jest to bardziej wydajne, jeśli musisz zmienić kolejność, możesz odtworzyć wyliczenie. zobacz te skrzypce sql: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. W czysty sposób rubinowy możesz zdefiniować 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.Ale moim zdaniem należy dodać tabelę o nazwie "states", z kolumnami "name" i "sequence" oraz określić kolejność w "sequence". Dołącz więc do "wydarzeń" i "stanów". Kiedy zmieniasz kolejność, nie musisz zmieniać kodu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Połącz pyodbc z Postgres

  2. Jak zaktualizować wiersze dwóch tabel, które mają ograniczenia dotyczące kluczy obcych

  3. CommandError:Wygląda na to, że nie masz zainstalowanego programu „psql” lub na swojej ścieżce

  4. Przechowuj i pobieraj obrazy w Postgresql za pomocą Java

  5. Django ładuje się bardzo wolno