加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Postgres:按字符串列排序,具有已知值

发布时间:2020-12-17 04:19:45 所属栏目:百科 来源:网络整理
导读:我有一个带状态列的事件表.如果一切按计划进行,各州只能是以下之一: 预定 邀请 通知 开始了 结束了 是否可以按州订购并指定哪个值来自第一,第二,第三等……? 奖励积分:有没有办法在Rails 3中轻松完成这项工作? 解决方法 1.如果你只需要postgres中的sql,
我有一个带状态列的事件表.如果一切按计划进行,各州只能是以下之一:

>预定
>邀请
>通知
>开始了
>结束了

是否可以按州订购并指定哪个值来自第一,第二,第三等……?

奖励积分:有没有办法在Rails 3中轻松完成这项工作?

解决方法

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中的状态顺序,不需要改变ruby代码,播放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.以纯ruby方式,您可以定义哈希:

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”中指定顺序.然后加入“事件”和“状态”.更改顺序时,无需更改代码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读