gpt4 book ai didi

mysql - 在 Rails 5/mysql 中制定左连接查询时出现的问题

转载 作者:行者123 更新时间:2023-11-29 17:16:16 25 4
gpt4 key购买 nike

数据库中有三张表。首先,用户有id。其次,具有 id 的项目,第三,user_actions 具有 user_id、item_id、is_deleted。

#Item
has_many :user_actions
#User
has_many :user_actions
#UserAction
belongs_to :user
belongs_to :item

仅当用户选择删除选项时才会出现 User_actions 条目。否则,用户在 user_actions 表中没有该项目的条目。

我必须编写一个查询来获取用户尚未删除的所有项目。我尝试在rails5中使用left_join,但无法让它正常工作。

一些我之前没有传达的信息(抱歉)。

  • 元素是独一无二的。假设我们从 Facebook 上的所有帖子等来源获取它。
  • 有大量用户被添加和删除,例如订阅者列表。
  • 所有项目对所有用户都是可见的,除非用户自己删除它。项目仍然存在,并且对可以独立操作的其他用户可见。

我们需要一个解决方案来解决这个问题,我们可以在其中查询并获取用户未删除的所有项目。

最佳答案

假设您的模型如下:

class Item < ApplicationRecord
has_many :user_actions
end

class User < ApplicationRecord
has_many :user_actions
end

class UserAction < ApplicationRecord
belongs_to :user
belongs_to :item
end

您可能缺少 UserItem 之间的关联。

class Item < ApplicationRecord
belongs_to :user
has_many :user_actions
end

class User < ApplicationRecord
has_many :items
has_many :user_actions
end

当然,还要运行迁移以在 items 表中添加 user_id

然后你可以这样做:

your_user     = User.find your_user_id
deleted_items = UserAction.where(user: your_user).map(&:item).map &:id
items = Item.where(user: your_user).where.not(id: deleted_items)

但如果没有更多信息,很难猜测

关于mysql - 在 Rails 5/mysql 中制定左连接查询时出现的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51579064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com