我有多个字符串都是数字值。它们都在同一个数据库表中。有没有办法将它们全部加入并按最高数字排序?
类似的东西(伪代码):
:include => :word_one_value, :word_two_value, :word_three_value, :sort_by => "sum ASC"
我有多个字符串都是数字值。它们都在同一个数据库表中。有没有办法将它们全部加入并按最高数字排序?
类似的东西(伪代码):
:include => :word_one_value, :word_two_value, :word_three_value, :sort_by => "sum ASC"
在 MySql 中:
Foo.order '(convert(word_one, unsigned) +
convert(word_two, unsigned) +
convert(word_three, unsigned))'
在 ActiveRecord 中:
Foo.all.sort_by do |f|
%w[one two three].sum { |n| f.send("word_#{n}").to_i }
end
或者如果这些字段在 Foo 中:
class Foo < ActiveRecord::Base
def self.sorted_by_sum_of_words
order '(convert(word_one, unsigned) +
convert(word_two, unsigned) +
convert(word_three, unsigned))'
end
end
然后在控制器中:
class FooController < ApplicationController
def my_action
@foos = Foo.sorted_by_sum_of_words
end
end
如果您将数字存储在数字列中,则无需进行转换。