【问题标题】:Rails & Mysql - Optimize and rephrase queryRails & Mysql - 优化和改写查询
【发布时间】:2012-12-09 15:30:18
【问题描述】:

感谢this answer 我之前的问题和this article 我找到了改写这个查询的方法:

SELECT * FROM participants
GROUP BY conversation_id
HAVING sum(user_id not in (1,3)) = 0

到这个 Rails 样式查询:

Participant.find(:all, group: "conversation_id HAVING sum(user_id not in (1,3)) = 0")

我是 Rails 新手,但在我看来这是旧语法 - 最困扰我的是我在其中使用了很多 sql,而不是全部使用 Rails 语法。

我怎样才能更进一步地改写上面的查询,以便它只用 Rails 语法编写,可能不需要引号?我需要确保这将与不同的数据库一起运行。

【问题讨论】:

    标签: mysql sql ruby-on-rails activerecord


    【解决方案1】:

    Rails 3 的方式是:

    Participant.group("conversation_id").having("sum(user_id not in (1,3)) = 0")
    

    您将无法在 having 子句中取消字符串。你对字符串有什么顾虑?上面的查询应该是相当可移植的。

    【讨论】:

    • 感谢您的帮助!如果您说这具有最大的便携性,那么这就是我所需要的。我在开发和测试中使用 mysql 数据库,在生产中使用 pqsql - 这就是我关心兼容性的原因。
    • 有什么理由使用 mysql 进行开发?没有什么反对的,只是想知道为什么你会有两个不同的数据库。如果您使用的是 Mac,您应该查看 postgresapp.com。它非常适合开发环境。
    • 我在知道 Heroku 使用 postgresql 之前就设置好了 ;-) 本地切换方便吗?感谢您的链接!
    • 如果您不关心开发数据,这很容易。我定期扔掉我的并从生产备份中导入。我建议在部署到生产环境时避免出现任何问题。
    • 我明白了——我会考虑的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 2014-11-24
    • 1970-01-01
    • 2011-01-22
    • 2011-07-07
    • 2018-12-21
    相关资源
    最近更新 更多