【问题标题】:Get stats table from a many to many relationship从多对多关系获取统计信息表
【发布时间】:2023-03-25 08:21:01
【问题描述】:

我有一个用于userscollected_guitars 之间多对多关系的数据透视表。如您所见,“collected_guitar”是一个引用外部表(guitar_modelsfinish)中某些数据的项目。

我的用户在外部表中也有一些外部数据(hand_typesgenders

如果我在"collected_guitar_user" 中查找特定的model_id,我想获得一个列出数据的派生表

假设“Fender Stratocaster”的型号 id = 200,其中品牌是 Fender(品牌表的 id = 1)。 同一把吉他可以有多种饰面,因此可以使用另一张桌子collected_guitars

一个用户可以在他的收藏中拥有这个项目

现在我想通过查看数据透视表“collected_guitar_user”中的 model_id(在本例中为 200)来找到由共享相同 genders.sex 和 hand_types.type 的用户收集的 Fender Stratocaster 数量作为登录用户并查看他们划分的完成情况(完成 A 和 B 的一些百分比等......)。 因此,用户可以看到对其他人购买的东西感兴趣的用户可以看到模型的一些统计数据。 什么查询可以导出这种表??

【问题讨论】:

  • collected_guitar 是指owned_guitar
  • 您是否已经为这些表定义了 Eloquent 模型和关系范围?
  • 是的,我确实定义了所有模型和关系。
  • 好吧,我还是有点困惑。因此,对于给定用户(当前已通过身份验证的用户),您希望获取具有相同性别和手型的其他用户的集合。然后,从整个用户组中,您想了解他们总共拥有多少台 Fender Stratocaster?或者,每个这些用户拥有多少 Fender Stratocaster?
  • 它的工作原理是这样的:经过身份验证的用户提交对“fender stratocaster”的搜索,结果应该是当前在其他用户的集合中的所有fender stratocasters,这些用户拥有相同的手和性别身份验证用户。假设只有一个名为 stratocaster 的模型,因此程序将显示该模型以及每个完成的百分比。例如实心 70%,透明 30%。

标签: mysql eloquent statistics pivot-table


【解决方案1】:

您可以使用GROUP BY 语法和CROSS JOIN 来计算总数的百分比:

SELECT make.make, models.model_name as model, finish.finish,
    COUNT(1) AS number_of_users,
    (COUNT(1) / u.total * 100) AS percent_owned
FROM owned_guitar, owned_guitar_users, users, models, make, finish
CROSS JOIN (SELECT COUNT(1) AS total FROM users) u
WHERE users.id = owned_guitar_users.user_id
AND owned_guitar_user.owned_guitar_id = owned_guitar.id
AND owned_guitar.model_id = models.id
AND owned_guitar.make_id = make.id
AND owned_guitar.finish_id = finish.id
GROUP BY owned_guitar.id

但请注意,如果用户拥有不止一把吉他,则百分比的总和不再一定为一(例如,Jack 和 John 可以同时拥有所有五把吉他,因此他们每个人都拥有“100% ”的吉他)。

您的数据库设计也让我有些困惑。为什么finish_idmake_idowned_guitar 表以及models 表中直接关联?

【讨论】:

  • 此查询返回空结果
  • 看来您在 UML 中为 owned_guitar 表拼错了“完成”。这可能是问题的一部分吗?我没有设置你的整个数据库,所以我很难测试这个查询。
  • 我也遇到了麻烦,因为您的表名不一致......有些是复数形式(usersmodels),而另一些(owned_guitar)不是。您可能必须修复名称,否则此查询通常应该是正确的方法。
  • 抱歉,我只制作了一些示例表来展示我正在寻找的内容。现在我得到了一些工作。我还需要将查询约束到一些我没有在示例中添加的用户属性。例如查找同龄用户收集的所有owned_guitars
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
  • 2012-05-07
  • 2019-07-07
  • 2021-07-23
相关资源
最近更新 更多