Mysql 如何使用rails创建此查询?
在rails中,如何在rails中创建以下查询?我知道如何用SQL编写它。我知道是否可以使用rails 以下代码:Mysql 如何使用rails创建此查询?,mysql,ruby-on-rails,Mysql,Ruby On Rails,在rails中,如何在rails中创建以下查询?我知道如何用SQL编写它。我知道是否可以使用rails 以下代码: one_day_ago = 1.days.ago.at_beginning_of_day; Client.joins(:user => {:cart => [:cart_items, :saved_items]}).where('cart_items.created_at > ?', one_day_ago).group('clients.user_id') 上
one_day_ago = 1.days.ago.at_beginning_of_day;
Client.joins(:user => {:cart => [:cart_items, :saved_items]}).where('cart_items.created_at > ?', one_day_ago).group('clients.user_id')
上面的代码创建以下查询:
SELECT `clients`.* FROM `clients`
INNER JOIN `users` ON `users`.`id` = `clients`.`user_id`
INNER JOIN `carts` ON `carts`.`user_id` = `users`.`id`
INNER JOIN `cart_items` ON `cart_items`.`cart_id` = `carts`.`id`
AND `cart_items`.`type` IN ('CartItem')
INNER JOIN `cart_items` `saved_items_carts` ON `saved_items_carts`.`cart_id` = `carts`.`id`
AND `saved_items_carts`.`type` IN ('SavedItem')
WHERE (cart_items.created_at > '2019-03-31 04:00:00.000000') GROUP BY clients.user_id
如何让rails创建如下查询:
选择clients.*FROM clients internal JOIN users ON users.id=clients.user\u id
carts.user\u id=users.id上的内部联接carts
内部加入购物车上的购物车项目。购物车id=购物车id
其中cart_items.created_位于“2019-03-31 04:00:00.000000”
和cart_items。键入“SavedItem”,按客户端分组“CartItem”。用户id我不太清楚为什么您希望第二部分包含OR,但您可以根据需要编写联接查询:
Client.joins(user: { cart: [:cart_items] }).joins("INNER JOIN cart_items saved_cart_items ON saved_cart_items.cart_id = carts.id OR saved_cart_items.type IN ('SavedItem')").where('cart_items.created_at > ?', one_day_ago).group('clients.user_id')
查看此更新的查询是否提供了所需的输出:
Client
.joins(:user, :cart)
.joins('INNER JOIN cart_items ON cart_items.id = carts.id')
.where('cart_items.created_at > ?', one_day_ago)
.where(cart_items: { type: ['SavedItem', 'CartItem'] })
.group('clients.user_id')
很抱歉,我已将代码更新为我试图实现的查询。