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
字段是自动增加的,那么表之间并不是唯一的关系。也许是
名称