【发布时间】:2019-08-03 16:23:04
【问题描述】:
我有什么:
Table 1 : USERS (autoID, name, etc)
Table 2 : TROPHIES (autoID, name, etc)
Table 3 : VIEWS (userID, timestamp, etc)
Table 4 : CANDIDATES (userID, trophyID, etc)
我所知道的:
USERS.autoID & TROPHIES.autoID
我是如何做到的:
我有这个 TROPHIES 表,其中存储了可以提名用户的不同类别。
每个用户都可以从 TROPHIES 表中提名 1,2 个或更多奖杯。
在 VIEWS 表中,我使用 USERS.autoID、时间戳和其他数据存储每个用户的个人资料的每个视图。
在 CANDIDATES 表中,我存储了 TROPHIES.autoID 和 USERS.autoID - 这样我就知道哪个用户被提名为哪个奖杯。
我需要知道的
了解 USERS.autoID 和 TROPHIES.autoID 我想根据过去 3 天的条目数创建一个 TOP,例如在 CANDIDATES 表中针对该特定奖杯列出的所有用户的 VIEWS 表中,并找出POSITION 在特定用户的顶部。
因此,假设具有 autoID 1 的用户被提名为具有 autoID 10 的 TROPHY,并且在过去 3 天的 VIEWS 表中有 100 个条目,但是还有其他 3 个具有 autoID 10 的用户被提名到 TROPHY,他们有过去 3 天内有超过 100 个条目,所以...我需要一个可以返回数字 4 的选择。
我的问题:
我可以用 1 个 SELECT 查询来做到这一点吗?如果是……怎么办?如果没有...我怎样才能使这个查询花费尽可能少的资源。
谢谢!
[编辑]
这是一些数据
表 1 - 用户
+--------+--------+ |自动识别 |姓名 | +--------+--------+ | 1 |用户1 | | 2 |用户2 | | 3 |用户3 | +--------+--------+表 2 - 奖杯
+--------+------------+ |自动识别 |姓名 | +--------+------------+ | 1 |棒球 | | 2 |篮球 | | 3 |拳击 | +--------+------------+表 3 - 视图
+--------+--------+------------+ |自动识别 |用户名 |时间戳 | +--------+--------+------------+ | 1 | 2 | 1551632970 | | 2 | 2 | 1551632971 | | 3 | 3 | 1551632972 | | 4 | 1 | 1551632973 | | 5 | 2 | 1551632974 | | 6 | 1 | 1551632975 | | 7 | 3 | 1551632976 | | 8 | 1 | 1551632977 | | 9 | 2 | 1551632978 | | 10 | 3 | 1551632979 | | 11 | 3 | 1551632980 | | 12 | 3 | 1551632981 | +--------+--------+------------+表 4 - 候选人
+--------+--------+----------+ |自动识别 |用户名 |奖杯ID | +--------+--------+----------+ | 1 | 2 | 1 | | 2 | 3 | 3 | | 3 | 1 | 2 | | 4 | 1 | 1 | +--------+--------+----------+最后,我希望能够根据 VIEWS 表中的条目了解用户在特定奖杯上的位置。
假设我想在时间戳 1551632972 之后检查棒球的 autoID = 1 的 USER 的位置(autoID = 1 的奖杯)。
所以...首先,我们必须查看此奖杯中列出了哪些用户,这样我们就可以忽略其他用户的 VIEWS 表中的条目。 autoID 为 1(棒球)的奖杯仅列出了两个用户 - user1 和 user2。
现在我想看看两者都有多少条目,以便能够找出 user1 在此顶部的位置。
因此,如果我们从表 VIEWS 中为 user1 选择并计算时间戳等于或大于 1551632972 的所有条目,我们将得到数字 3,如果我们为 user2 做同样的事情,我们将得到 2,因为 3 更大超过 2,user1 将排在第 1 位,user2 将排在第 2 位。
我正在寻找一种方法,以便使用单个 MySQL 查询(如果可能)为特定运动中的特定用户获得 TOP 中的位置,或者寻找最佳解决方案...
【问题讨论】:
-
显示一些示例数据和预期输出。你试过什么 SQL?
-
您的
USERS表没有userID列。如果autoID字段自动增加,则它不是表之间的唯一关系。也许name?