Rails& Mysql - 优化和重新定义查询

时间:2012-12-09 15:30:18

标签: mysql sql ruby-on-rails activerecord

感谢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语法编写,可能不需要引号?我需要确保这将与不同的数据库一起运行。

1 个答案:

答案 0 :(得分:1)

Rails 3的方式是:

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

您将无法取消having子句中的字符串。你对弦乐的关注是什么?上面的查询应该是相当便携的。