PHP排名算法

时间:2014-09-15 21:34:44

标签: php mysql database algorithm

我有一个网站,会根据用户在某些活动中获得的积分对用户进行排名。这是我的数据库结构:

pointsentered
1. ID
2.电子邮件
3.代码

pointvalues
1. ID
2.代码
3.标题
4.价值

我有一个连接到 pointsentered 的文件,并将用户选择提交给它。 " Code" field对应 pointvalues

pointvalues 中,"标题"对应于他们完成的事件的名称。代码是一个简单的字母数字代码,对应于特定事件及其拥有的值。 "值"是相当自我解释的,因为它包含事件所涉及的点值。

基本上,我希望有一个脚本 1.根据 pointsentered 中的输入点对所有用户(拥有不同电子邮件)进行排名(但根据"代码"从 pointvalues 获取积分; ) 2.显示用户已达到的点数。它与用户的电子邮件有关。

显然,我不是在寻找有人为我这样做,我只是在寻找一些关于如何开始的指导,因为我迷失了。

提前致谢。

1 个答案:

答案 0 :(得分:0)

通过简单的查询,这应该很容易实现:

SELECT pe.Email, SUM(pv.Value) as 'total_points' FROM pointsentered pe
JOIN pointvalues pv ON pe.Code = pv.Code
GROUP BY pe.Email
ORDER BY total_points DESC

这里有两个表pointsenteredpointvaluespointsentered表包含获得积分的人的Email(pe.Email)。该表中还有一个Code(pe.Code),它对应于pointvalues表中的一行。因此,我们可以查询pointsenteredJOIN pointvalues表,以获取所有获奖积分的列表,获奖者的电子邮件以及获得的积分数。我们还可以通过电子邮件将聚合函数应用于点值(SUM)和组,从而产生所有唯一电子邮件的列表以及奖励给该电子邮件的总点数,从最高总点数开始(DESC) )。