首页 文章

Arel查询问题使用where和group

提问于
浏览
0

在Rails 4中,我有这3个表:

具有以下列的用户表:-name -email

订单表包含以下列:-amount -user_id

包含以下列的项目表:-name -description

OrderItems表包含以下列:order_id item_id

关系: - orderItems表是一个连接表 - 用户有很多订单,订单属于用户 .

问题:1)找到5个最大订单(订单最多的订单)我认为查询是:

OrderItem.group(:order_id).order(count(id) desc").limit(5).pluck(:order_id)

小组究竟做了什么?当我输入 OrderItem.group(:order_id) 时我不理解输出 .

2)如何找到名为“betty”和“email”的用户betty@gmail.com“ . 为此,我是否需要在我的Arel中编写SQL?

1 回答

  • 0
    • OrderItem.group(:order_id) 本身不会产生有效的SQL . group 变成SQL GROUP BY 语句,如果它们为指定的列共享相同的值,则将行组合在一起 . GROUP BY 需要与 SELECT 语句一起使用,该语句具有 GROUP BY 中的列或者是 COUNT 等聚合函数 .

    您的完整查询缺少 order 子句中的引号 . 你会想要:

    OrderItem.group(:order_id).order("count(id) desc").limit(5).pluck(:order_id)
    
    • 要查找名为“betty”的用户和电子邮件“betty@gmail.com”,您可以使用:
    User.where(name: "betty", email: "betty@gmail.com")
    

相关问题