sql >> Databáze >  >> RDS >> PostgreSQL

Postgres:Seřaďte podle sloupce řetězce se známými hodnotami

1.Pokud potřebujete sql v postgresu, tady je:

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)    

můžete změnit pořadí stavů v sql, není třeba měnit rubínový kód, hrajte na housle sql:http://sqlfiddle.com/#!12/976e9/3 .

2. Podle návrhu mu můžete použít typ výčtu, je to efektivnější, pokud potřebujete změnit pořadí, můžete výčet znovu vytvořit. podívejte se na tuto sql housle: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. Čistě rubínovým způsobem můžete definovat 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 podle mého názoru byste měli přidat tabulku s názvem "stavy" se sloupci "name" a "sequence" a zadat pořadí v "sekvenci". Pak se připojte k „událostem“ a „stavům“. Když změníte objednávku, nemusíte měnit kód.




  1. Přesunutí databáze MariaDB do šifrovaných a nešifrovaných států

  2. Jednotky data a času v MySQL (úplný seznam)

  3. Jak zaokrouhlit dolů na nejbližší celé číslo v MySQL?

  4. Jak extrahovat pouze sloupce, které mají nenulové hodnoty v mysql a php?