【问题标题】:Rails Mysql Group by strftime query not working in productionRails Mysql Group by strftime 查询在生产中不起作用
【发布时间】:2015-08-05 11:55:31
【问题描述】:

我在 Rails 中有一个查询,该查询正在开发中而不是在生产中。查询是:

Event.where("created_at > ? AND name = ? AND game = ?", 3.month.ago, Event::TYPE_USER_SESSION, PLATFORM_CODE).group("strftime('%Y-%m-%d 00:00:00 UTC', created_at, '-6 days', 'weekday 0')").distinct.count(:user_id)

翻译成:

SELECT DISTINCT COUNT(DISTINCT "events"."user_id") AS count_user_id, strftime('%Y-%m-%d 00:00:00 UTC', created_at, '-6 days', 'weekday 0') AS strftime_y_m_d_00_00_00_utc_created_at_6_days_weekday_0 FROM "events" WHERE (created_at > '2015-05-05 11:51:32.292908' AND name = 'user_session' AND game = 'LK') GROUP BY strftime('%Y-%m-%d 00:00:00 UTC', created_at, '-6 days', 'weekday 0')

development works 使用 sqlite3,但在使用 mysql 的生产中,我收到此错误:

ActiveRecord::StatementInvalid: Mysql2::Error: FUNCTION monkiland.strftime does not exist: SELECT DISTINCT COUNT(DISTINCT `events`.`user_id`) AS count_user_id, strftime('%Y-%m-%d 00:00:00 UTC', created_at, '-6 days', 'weekday 0') AS strftime_y_m_d_00_00_00_utc_created_at_6_days_weekday_0 FROM `events` WHERE (created_at > '2015-05-05 11:52:09.879454' AND name = 'user_session' AND game = 'LK') GROUP BY strftime('%Y-%m-%d 00:00:00 UTC', created_at, '-6 days', 'weekday 0')

在我的 gemfile 中

group :production do
  gem 'mysql2', '0.3.17'
end

group :development do
  gem 'sqlite3'
end

提前致谢!!!

【问题讨论】:

  • 请注意,您不认为 strftime_y_m_d_00_00_00_utc_created_at_6_days_weekday_0 的名字有点长吗?
  • @PratikCJoshi rails 自动生成它

标签: mysql sql ruby-on-rails activerecord rails-activerecord


【解决方案1】:

使用Data_Format()函数,类似于strftime()。

【讨论】:

  • DATE_FORMAT() 将在生产中工作,但在开发中不起作用。此外,语法是不同的。我不熟悉 DATE_FORMAT 也不知道如何像 stftime() 函数那样按周分组
猜你喜欢
  • 2015-10-13
  • 2017-04-28
  • 1970-01-01
  • 1970-01-01
  • 2011-08-05
  • 1970-01-01
  • 1970-01-01
  • 2016-02-12
  • 1970-01-01
相关资源
最近更新 更多