Jes*_*ham 1 ruby sql postgresql ruby-on-rails
我将字符串变量存储在数据库中,"Abstain","Block","No"或"Yes".目前我正在使用一个ORDER BY position,而不是字母顺序,我想命令他们像:'阻止','不','弃权','是'.在Rails中有一个简单的方法吗?
我的确切代码是:
def self.unique_votes(motion)
Vote.find_by_sql("SELECT * FROM votes a WHERE created_at = (SELECT MAX(created_at) as created_at FROM votes b WHERE a.user_id = b.user_id AND motion_id = #{motion.id}) ORDER BY a.position")
end
Run Code Online (Sandbox Code Playgroud)
注意:我正在使用Postgres SQL,我正在寻找一个可以在select语句中使用的解决方案谢谢!
这是实现这一目标的方法之一.顺便说一句,执行此类操作的最佳方法是使用另一个名为table的表"Position"来标识表中的数字和外键"votes"以引用表的主键"Position".您还可以"Order"在"Position"表中命名另一列来存储这些数字并进行排序.你应该在插入时间做这些事情,而不是每次选择.
干杯
SELECT *
, Case a.position
When 'Block' Then 0
When 'No' Then 1
When 'Abstain' Then 2
When 'Yes' Then 3
Else -1
End As Position_Value
FROM votes a
WHERE created_at = (
SELECT MAX(created_at) as created_at
FROM votes b
WHERE a.user_id = b.user_id
AND motion_id = #{motion.id}
)
ORDER BY Position_Value
Run Code Online (Sandbox Code Playgroud)
如果它不能正常工作的任何方式!你可以尝试这个:
Select *
From (
SELECT *
, Case a.position
When 'Block' Then 0
When 'No' Then 1
When 'Abstain' Then 2
When 'Yes' Then 3
Else -1
End As Position_Value
FROM votes a
WHERE created_at = (
SELECT MAX(created_at) as created_at
FROM votes b
WHERE a.user_id = b.user_id
AND motion_id = #{motion.id}
)
) As Result
ORDER BY Position_Value
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
930 次 |
| 最近记录: |