PHP/MySQL根据引用计数对用户进行排名,并选择一条记录

PHP/MySQL根据引用计数对用户进行排名,并选择一条记录,php,mysql,sql,ranking,Php,Mysql,Sql,Ranking,因此,我目前在数据库中有一个名为“users”的表 假设“users”有两列:“Email”和“ReferralCount” 例如: Email ReferralCount 1@1.com 5 2@2.com 3 3@3.com 7 我希望能够做到的是,根据他们的推荐计数,对该表中的数据进行排名,其中最高的推荐计数为排名1,以此类推。然后,我需要能够得到该用户的排名,根据他们的电子邮件地址 我只使用了基本的SQL,所以我不太确定如何做到这一点 非常感谢任何帮助 这取决于你所

因此,我目前在数据库中有一个名为“users”的表

假设“users”有两列:“Email”和“ReferralCount”

例如:

Email     ReferralCount
1@1.com   5
2@2.com   3
3@3.com   7
我希望能够做到的是,根据他们的推荐计数,对该表中的数据进行排名,其中最高的推荐计数为排名1,以此类推。然后,我需要能够得到该用户的排名,根据他们的电子邮件地址

我只使用了基本的SQL,所以我不太确定如何做到这一点


非常感谢任何帮助

这取决于你所说的“排名”是什么意思。以下为“密集等级”,因此所有领带都具有相同的值:

select 1 + count(distinct u.referralcount)
from users u
where u.referralcount > (select u2.referralcount from users u2 where u2.user = @email);

这取决于你所说的“等级”是什么意思。以下为“密集等级”,因此所有领带都具有相同的值:

select 1 + count(distinct u.referralcount)
from users u
where u.referralcount > (select u2.referralcount from users u2 where u2.user = @email);

编辑:抱歉,戈登·林诺夫已经更直接地回答了这个问题。这就是我在回答问题时分心的原因。:)


您可以使用子查询获取所讨论的电子邮件的ReferralCount,然后获取有多少用户行具有较高的ReferralCount的计数

您的子查询将获得该用户的ReferralCount(例如1@1.com):
从发送电子邮件的用户中选择ReferralCount=1@1.com

然后,如果将其用作where子句中的子查询,则可以计算有多少用户具有更高的ReferralCount(请记住在排名中添加1。如果它返回“1”更高的用户,则应输出“2”作为当前用户的排名):

这将输出“2”,因为只有3@3.com被推荐的人比被推荐的人多1@1.com.

您可能希望跳过具有相同ReferralCount的用户。例如,如果三个用户都有“10”个推荐,而您查询的用户有“9”,那么上面的查询将输出“4”的排名,即使9个推荐仅排在10之后的第二位。如果您希望它返回排名为“2”(第二位),则可以获得ReferralCount的一个不同计数:

select 
    (count(distinct ReferralCount) + 1) as Rank
from
    users
where
    ReferralCount > (select ReferralCount from users where Email=1@1.com)

编辑:抱歉,戈登·林诺夫已经更直接地回答了这个问题。这就是我在回答问题时分心的原因。:)


您可以使用子查询获取所讨论的电子邮件的ReferralCount,然后获取有多少用户行具有较高的ReferralCount的计数

您的子查询将获得该用户的ReferralCount(例如1@1.com):
从发送电子邮件的用户中选择ReferralCount=1@1.com

然后,如果将其用作where子句中的子查询,则可以计算有多少用户具有更高的ReferralCount(请记住在排名中添加1。如果它返回“1”更高的用户,则应输出“2”作为当前用户的排名):

这将输出“2”,因为只有3@3.com被推荐的人比被推荐的人多1@1.com.

您可能希望跳过具有相同ReferralCount的用户。例如,如果三个用户都有“10”个推荐,而您查询的用户有“9”,那么上面的查询将输出“4”的排名,即使9个推荐仅排在10之后的第二位。如果您希望它返回排名为“2”(第二位),则可以获得ReferralCount的一个不同计数:

select 
    (count(distinct ReferralCount) + 1) as Rank
from
    users
where
    ReferralCount > (select ReferralCount from users where Email=1@1.com)


写一个按引用计数降序的select query&do order by ReferralCount。您应该根据引用计数创建视图,并将排名放在那里,一旦您的视图在缓存中创建了存储并从那里启动查询,如果您的用户中有任何更新,请再次创建新视图。您希望如何处理关系?说2@2.com也是5个参考。。。他们都是排名第二还是一个排名第二或第三?它们都是3吗?哇,在另一个stackoverflow中有一个很好的例子,在这个地址上,它将真正向您展示一些对您有价值的东西:-享受,并自由提问…@xQbert我希望排名是唯一的,我的意思是每个排名位置只有一行,所以如果两个用户有5个推荐,他们的级别是2级和3级。谢谢写一个按引用计数降序的select query&do order by ReferralCount。您应该根据引用计数创建视图,并将排名放在那里,一旦您的视图在缓存中创建了存储并从那里启动查询,如果您的用户中有任何更新,请再次创建新视图。您希望如何处理关系?说2@2.com也是5个参考。。。他们都是排名第二还是一个排名第二或第三?它们都是3吗?哇,在另一个stackoverflow中有一个很好的例子,在这个地址上,它将真正向您展示一些对您有价值的东西:-享受,并自由提问…@xQbert我希望排名是唯一的,我的意思是每个排名位置只有一行,所以如果两个用户有5个推荐,他们的级别是2级和3级。谢谢抱歉,这是一个新问题,但是我想知道在任何查询中使用子查询是否好@Gordon LinoffSubqueries使用起来很好,通常是构建某些查询的唯一方法
Join
ing users表的两个实例是解决此问题的另一种方法,但子查询很好。很抱歉,这是一个新问题,但是想知道在任何查询中使用子查询好吗@Gordon LinoffSubqueries使用起来很好,通常是构建某些查询的唯一方法
Join
ing users表的两个实例是解决此问题的另一种方法,但子查询很好。您没有在每个列上提供排名-另一个stackoverflow条目确实提供了排名:-检查一下,如果您同意,您可以编辑您的答案?@DavidSvarrer感谢您为我指出这个答案。然而,我没有看到这个问题和OP的问题之间有直接的联系;也许你可以再详细一点?我的理解是OP的问题是询问单个行的排名,而您的链接问题只是希望为多个返回行生成一个行号。本质上,OP是要求一行在整个表中的排名,而该问题要求一行在结果集中的排名。也许我忽略了什么?@RobbieToyota对,我要求的是一行在一个整体内的排名