簡體   English   中英

加入 2 個不同的表,其中 user_id 等於 2 個日期之間的 created_at

[英]Joining 2 different tables where user_id equals to and created_at between 2 dates

在我的應用程序中,我有 3 個模型UserVisitPost 我想要實現的是選擇屬於user visitsposts ,其中created_at在 2 個日期之間並按group (我將groupdate用於group_by_day並返回該日期的visitsposts count

我已經嘗試了幾個沒有運氣:

User.joins(:visits,:posts).where("visits.user_id = ?, posts.user_id = ?", current_user.id, current_user.id)
    .where("visits.created_at >= ? AND visits.created_at <= ?", 15.days.ago.midnight.in_time_zone("Berlin"), 2.days.ago.midnight.in_time_zone("Berlin"))
    .where("posts.created_at >= ? AND posts.created_at <= ?", 15.days.ago.midnight.in_time_zone("Berlin"), 2.days.ago.midnight.in_time_zone("Berlin"))
    .group_by_day(:created_at, range: 15.days.ago.midnight.in_time_zone("Berlin")..Time.now.in_time_zone("Berlin"), format: "%d %b")
    .count

這給了我: ActiveRecord::StatementInvalid

SQLite3::SQLException: row value misused: SELECT COUNT(*) AS count_all, strftime('%Y-%m-%d 00:00:00 UTC', "users"."created_at") AS strftime_y_m_d_00_00_00_utc_users_created_at FROM "users" INNER JOIN "visits" ON "visits"."user_id" = "users"."id" INNER JOIN "posts" ON "posts"."user_id" = "users"."id" WHERE (visits.user_id = 1, posts.user_id = 1) AND (visits.created_at >= '2020-01-20 00:00:00' AND visits.created_at <= '2020-02-02 00:00:00') AND (posts.created_at >= '2020-01-20 00:00:00' AND posts.created_at <= '2020-02-02 00:00:00') AND ("users"."created_at" >= '2020-01-20 00:00:00' AND "users"."created_at" <= '2020-02-04 19:03:28.383850') GROUP BY strftime('%Y-%m-%d 00:00:00 UTC', "users"."created_at")

我的模型:

class Visit < ApplicationRecord
  belongs_to :user
end

class Post < ApplicationRecord
    belongs_to :user
end

class User < ApplicationRecord
  has_many :visits
  has_many :posts
end

我一直在環顧四周,嘗試了幾種不同的方法,但沒有運氣。 非常感謝任何 Rails 幫助只是簡單的sql或提示,並提前致謝!

試試這個:

_start_time = 15.days.ago.midnight.in_time_zone("Berlin") ## get start time
_end_time = 2.days.ago.midnight.in_time_zone("Berlin") ## get end time

 #### query ###
User.joins(:visits, :posts).where(visits: { created_at: (_start_time.._end_time) }).where(posts: { created_at: (_start_time.._end_time) }).group_by_day(:created_at, range: _start_time..Time.now.in_time_zone("Berlin"), format: "%d %b").count

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM