mysql - :joins and :includes 之间的事件记录查询冲突

标签 mysql ruby-on-rails

谁能为下面的查询建议一个简单的修复方法?

Workout.all(:joins => [:person, :schedule], 
        :conditions => ["schedule.id = ? AND people.gym_id = ?", schedule.id, gym.id ], 
        :order => "time DESC",
        :include => [:person]),

错误消息说 Mysql::Error: Not unique table/alias: 'people': 然后是一个很长的 sql 查询

当我从 :include 选项中删除 :person 时,代码工作正常。然而,我遇到了“n+1 个查询”问题:当我显示锻炼时,它会为每个人生成一个单独的查询。

我假设在生成的 SQL 中连接和包含选项中的“人员”表发生冲突。有没有办法使用查找选项为具有事件记录的表取别名?或者我是否需要为 :joins 选项使用一个 sql 片段,以便我可以使用 AS 为表起别名?

我还没有将这个应用程序升级到 3.0,所以我不能使用“Class.joins().where()”语法。

最佳答案

您可以从联接中删除 :person 并将其保留在包含中,您可以在 :select 选项中添加人员表中的字段,例如

Workout.all(:joins => [:schedule], 
    :conditions => ["schedule.id = ? AND people.gym_id = ?", schedule.id, gym.id ], 
    :order => "time DESC",
    :select => "workouts.*,people.*"
    :include => [:person])

关于mysql - :joins and :includes 之间的事件记录查询冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5382713/

相关文章:

javascript - 基于元素样式的 RJS 条件 - Ruby on rails

php - 选择 SQL 中的问题

Mysql join 删除查询问题

MySql 更新查询太慢(本地主机)

ruby-on-rails - Rspec 测试搜查总是返回所有实例

ruby-on-rails - 使用 'registered' 属性渲染 Facebook 好友

ruby-on-rails - Rails 创建连接表索引名称太长

java - Java中如何从MySQL登录后获取特定用户的信息

mysql - 在 c 脚本中连接到 mysql?

ruby-on-rails - 如何带条件导入索引