gpt4 book ai didi

ruby - 复杂的 DataMapper 查询关联

转载 作者:数据小太阳 更新时间:2023-10-29 06:57:21 24 4
gpt4 key购买 nike

我是 DataMapper ORM 的初学者,所以我对复杂查询有疑问。

首先,这是简化的数据对象:

class User  
property :id, Serial
property :login, String

has n, :actions
end

class Item
property :id, Serial
property :title

has n, :actions
has n, :users, :through => :actions
end

class Action
property :user_id, Integer
property :item_id, Integer

belongs_to :item
belongs_to :user
end

数据库中的数据是这样的:

+ ------- + + ------- + + ------- +
| Users | | Items | | Actions |
+ ------- + + ------- + + ------- +
| 1 | u1 | | 3 | i1 | | 1 | 4 |
| 2 | u2 | | 4 | i2 | | 1 | 3 |
| ....... | | 5 | i3 | | 1 | 4 |
+ ------- + | ....... | | 1 | 5 |
+ ------- + | 1 | 6 |
| 1 | 3 |
| ....... |
+ ------- +

因此,例如,用户 1 已查看某些项目 N 次。我想不通的是,如何选择项目及其与用户相关的操作量。

例如,用户 1 的结果应该是这样的:

+ -------------------- |
| Items (item_id, num) |
+ -------------------- |
| 3, 2 |
| 4, 2 |
| 5, 1 |
| 6, 1 |
+ -------------------- +

附言符合我需求的常规 SQL 查询:

SELECT i.id, i.title, COUNT(*) as 'num'
FROM actions a
JOIN items i on i.id = a.item_id
WHERE a.user_id = {USERID}
GROUP by a.id
ORDER BY num DESC
LIMIT 10;

那么,如何做到这一点,是否有任何关于复杂数据映射器查询的文档?

最佳答案

万一还有人想知道:

Action.aggregate(:item_id, :all.count, :user_id => 1, :order => [item_id.asc])

会返回类似的东西

[ [ 3, 2 ],
[ 4, 2 ],
[ 5, 1 ],
[ 6, 1 ]
]

这里无法按 all.count 进行排序,但它可以为您提供所需的数据:)

关于ruby - 复杂的 DataMapper 查询关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/993868/

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