Php MySQL选择创建一个基于表中条目数的排名…怎么做?
我所拥有的:Php MySQL选择创建一个基于表中条目数的排名…怎么做?,php,mysql,mysqli,Php,Mysql,Mysqli,我所拥有的: 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和奖杯.autoID 我是如何做到的: Table 1 : USERS (autoID, name, etc) Ta
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
和奖杯.autoID
我是如何做到的:
Table 1 : USERS (autoID, name, etc)
Table 2 : TROPHIES (autoID, name, etc)
Table 3 : VIEWS (userID, timestamp, etc)
Table 4 : CANDIDATES (userID, trophyID, etc)
我有这个奖杯表,我存储不同类别的用户可以提名
每个用户可以从奖杯表中提名1、2个或更多奖杯
在视图表中,我使用USERS.autoID、timestamp和其他数据存储每个用户的配置文件视图
在候选表中,我存储TROPHIES.autoID和USERS.autoID-这样我就知道哪个用户被提名获得哪个奖杯
我需要知道的
Knowing USERS.autoID&TROPHIES.autoID我想根据过去3天的条目数制作一个TOP,例如在“候选用户”表中列出的特定奖杯的所有用户的视图表中,并找出特定用户在该TOP上的位置
假设autoID为1的用户被提名为autoID为10的奖杯用户,并且在过去3天的视图表中有100个条目,但是还有其他3个autoID为10的用户被提名为奖杯用户,他们在过去3天中有100多个条目,所以…我需要一个选择,返回数字4
我的问题:
Table 1 : USERS (autoID, name, etc)
Table 2 : TROPHIES (autoID, name, etc)
Table 3 : VIEWS (userID, timestamp, etc)
Table 4 : CANDIDATES (userID, trophyID, etc)
我可以用一个单选查询来完成吗?如果是,怎么做?如果没有……我如何进行此查询以尽可能少地使用资源
谢谢
[编辑]
这里有一些数据
表1-用户
+--------+-------+
| autoID | name |
+--------+-------+
| 1 | user1 |
| 2 | user2 |
| 3 | user3 |
+--------+-------+
+--------+-------+
|自动识别|名称|
+--------+-------+
|1 |用户1|
|2 |用户2|
|3 |用户3|
+--------+-------+
表2-奖杯
+--------+------------+
| autoID | name |
+--------+------------+
| 1 | Baseball |
| 2 | Basketball |
| 3 | Boxing |
+--------+------------+
+--------+------------+
|自动识别|名称|
+--------+------------+
|1 |棒球|
|2 |篮球|
|3 |拳击|
+--------+------------+
表3-视图
+--------+--------+------------+
| autoID | userID | timestamp |
+--------+--------+------------+
| 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 |
+--------+--------+------------+
+--------+--------+------------+
|自动标识|用户标识|时间戳|
+--------+--------+------------+
| 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-候选人
+--------+--------+----------+
| autoID | userID | trophyID |
+--------+--------+----------+
| 1 | 2 | 1 |
| 2 | 3 | 3 |
| 3 | 1 | 2 |
| 4 | 1 | 1 |
+--------+--------+----------+
+--------+--------+----------+
|autoID | userID | trophyID|
+--------+--------+----------+
| 1 | 2 | 1 |
| 2 | 3 | 3 |
| 3 | 1 | 2 |
| 4 | 1 | 1 |
+--------+--------+----------+
最后,我希望能够根据VIEWS表中的条目知道用户在哪个位置获得特定奖杯
假设我想在时间戳1551632972之后检查autoID=1的棒球(autoID=1的奖杯)用户的位置
所以…首先我们必须看到哪些用户列在这个奖杯中,这样我们就可以忽略其他用户的表视图中的条目。autoID为1(棒球)的奖杯只列出了两个用户-user1和user2
现在我想看看这两个条目都有多少个,这样我就可以找出user1在这个顶部的位置
因此,如果我们从user1的表视图中选择并计算所有条目,其中时间戳等于或大于1551632972,我们将得到数字3,如果我们对user2做同样的事情,我们将得到2,因为3大于2,user1将排在第一位,user2将排在第二位
我正在寻找一种方法,使用一个MySQL查询(如果可能的话)为特定运动项目中的特定用户获得排名靠前的位置,或者找到最好的解决方案…我找到了解决方案…我将把它留在这里,以防其他人需要它
SELECT
U.autoId,
U.name,
U1.position
FROM USERS U
JOIN (SELECT
@rownum := @rownum + 1 AS position,
U.autoId,
U.name,
COUNT(V.autoID) as "Nr"
FROM USERS U
JOIN VIEWS V ON V.userID= U.autoID
JOIN CANDIDATESC ON C.userID= U.autoID
JOIN (SELECT @rownum := 0) R
WHERE C.trophyID= 'id_of_trophy_wanted' GROUP BY U.autoID ORDER BY Nr DESC) as U1 ON U1.autoID =
U.autoID
WHERE U.autoID = 'id_of_user_wanted'
感谢那些试图帮忙的人 显示一些示例数据和预期的输出。您尝试了什么SQL?您的
USERS
表没有userID
列。如果autoID
字段是自动增加的,那么表之间并不是唯一的关系。也许是名称
?