如何使用 sequel 和 ruby 获取列的第一个值?
How to get first value of a column using sequel and ruby?
这里是数据库连接代码
require 'sequel'
DB = Sequel.connect('jdbc:mysql://localhost/idemcon?user=root&password=root&zeroDateTimeBehavior=convertToNull', :max_connections => 10)
下面是从 MySQL table
中获取列总和的查询
使用第一种方法
DB.fetch("SELECT SUM(bill) AS total FROM invoice WHERE provider = '#{provider}' AND invoicedate BETWEEN '#{fromdate}' AND '#{thrudate}';").first[:total] || 0
或
使用 map 方法并选择第 0 个索引处的元素
DB.fetch("SELECT SUM(bill) AS total FROM invoice WHERE provider = '#{provider}' AND invoicedate BETWEEN '#{fromdate}' AND '#{thrudate}';").map(:total)[0] || 0
注意:在某些情况下我可能会得到 null,所以这就是为什么在查询的末尾附加 || 0
有没有更好的方法?如果不是我应该使用哪一个?
这可能是做你想做的最好的方法:
DB[:invoices].
where(:provider=>provider, :invoice_date=>fromdate..thrudate).
sum(:bill)
请注意,您提供的代码最多可能存在三个 SQL 注入漏洞,具体取决于变量值是否由用户提供。
这里是数据库连接代码
require 'sequel'
DB = Sequel.connect('jdbc:mysql://localhost/idemcon?user=root&password=root&zeroDateTimeBehavior=convertToNull', :max_connections => 10)
下面是从 MySQL table
中获取列总和的查询使用第一种方法
DB.fetch("SELECT SUM(bill) AS total FROM invoice WHERE provider = '#{provider}' AND invoicedate BETWEEN '#{fromdate}' AND '#{thrudate}';").first[:total] || 0
或
使用 map 方法并选择第 0 个索引处的元素
DB.fetch("SELECT SUM(bill) AS total FROM invoice WHERE provider = '#{provider}' AND invoicedate BETWEEN '#{fromdate}' AND '#{thrudate}';").map(:total)[0] || 0
注意:在某些情况下我可能会得到 null,所以这就是为什么在查询的末尾附加 || 0
有没有更好的方法?如果不是我应该使用哪一个?
这可能是做你想做的最好的方法:
DB[:invoices].
where(:provider=>provider, :invoice_date=>fromdate..thrudate).
sum(:bill)
请注意,您提供的代码最多可能存在三个 SQL 注入漏洞,具体取决于变量值是否由用户提供。