sql >> データベース >  >> RDS >> PostgreSQL

Postgres:既知の値を持つ文字列列による順序

    1.postgresでSQLが必要な場合は、次のとおりです:

    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)    
    

    SQLの状態の順序を変更できます。ルビーコードを変更する必要はなく、SQLフィドルを再生します。 http://sqlfiddle.com/#!12/976e9/3

    2.muの提案では、列挙型を使用できます。より効率的です。順序を変更する必要がある場合は、列挙型を再作成できます。この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.純粋なルビーの方法で、ハッシュを定義できます:

    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.しかし、私の意見では、「states」という名前のテーブルを「name」列と「sequence」列で追加し、「sequence」で順序を指定する必要があります。次に、「イベント」と「状態」に参加します。順序を変更するときに、コードを変更する必要はありません。




    1. SQL Serverの(nolock)とは何ですか?

    2. PHPで連想配列を並べ替える方法

    3. MySQLで列の名前を変更します

    4. CGIインターフェイスを介してC++バイナリを呼び出すにはどうすればよいですか?