【发布时间】:2015-06-26 18:03:34
【问题描述】:
我试图做简单的 SQL 查询任务。因此,我将活动记录和 SQLite 用于我的开发环境,将 PostgreSQL 用于我的产品。环境。
我认为使用 ActiveRecord 是因为它可以根据使用的数据库生成查询,但我的所有查询对于 PostgreSQL 都有一些错误。
查询:
@sql[0] = Task.select(:done, :deadline).order(name: :asc).distinct
@sql[1] = Task.joins(:project).group(:project_id).select("projects.name,
COUNT(*) as TaskCount").order("TaskCount DESC")
@sql[2] = Task.joins(:project).group(:project_id).select("projects.name,
COUNT(*) as TaskCount").order("projects.name ASC")
@sql[3] = Task.select("projects.name AS pName","tasks.*")
.joins(:project).where("projects.name LIKE ?",'N%')
.where("projects.name LIKE ?","%_a_%")'
@sql[4] = Project.joins("LEFT OUTER JOIN tasks
ON 'projects'.'id'='tasks'.'project_id'")
.group(:project_id)
.select("projects.*, COUNT(tasks.project_id) as TaskCount")
.where("projects.name LIKE ?","%_a_%")
@sql[5] = Task.group(:name).having("COUNT(*)>1").order(name: :asc)
@sql[6] = Task.joins(:project).where("projects.name = 'Garage'")
.group("tasks.name, tasks.done, tasks.deadline")
.having("COUNT(*)>1").select("tasks.*, COUNT(*)").order("COUNT(*) DESC")
@sql[7] = Task.where("tasks.done = ?",true).joins(:project).group(:project_id)
.having("COUNT(*)>=10").select("projects.name, COUNT(*) as TaskCount")
.order("projects.id DESC")
他们每个人都有一些错误。
我不希望你解决它们。
- 我的问题是如何首先避免它们?
- 我应该使用 PostgreSQL 也用于开发?
- 那么主动记录的目的是什么?我可以只写纯查询吗?因为这似乎是一个更好的选择。 (也许我错了?)
【问题讨论】:
-
我认为你的问题标签是错误的。至少考虑添加“rails”标签。
-
"我认为使用 ActiveRecord 是因为它可以根据使用的数据库生成查询,但我所有的查询对于 PostgreSQL 都有一些错误。"嗯,不,AR 并没有提供太多有用的可移植性,人们声称这是非常错误的信息。如果您在 PostgreSQL 上进行部署,那么您也需要在 PostgreSQL 上进行开发和测试。
标签: sql ruby-on-rails postgresql ruby-on-rails-4 activerecord