如何使用mysql和php进行排名

时间:2015-02-13 15:47:02

标签: php mysql sorting

我和我的朋友正在选择一个群组名称,而我正在尝试进行此排名,我们所有人都会根据我们的偏好对名称顺序进行排序。 我的程序应根据订单进行计算。

例如,如果我排序" JAIME" 1和" CERSEI" 2," JAIME"得到10分和" CERSEI" 8点。如果我的朋友排序" JAIME" 1和" CERSEI" 6," JAIME得到10分," CERSEI"没有积分。 所以,排名将是:

1- JAIME得20分 2- CERSEI,8分

我在mysql中有一个名为" NAMES"的简单表。这些领域

"id"
"name"
"riccardo"
"roberto"
"marika"
(and others friend names)

使用Jquery脚本,每个朋友都可以对名称列表进行排序。订单号自动输入mysql db。

所以,例如:

"id" --> 1
"name" --> JAIME
"riccardo" --> 1
"roberto" --> 2
"marika" --> 5 
1, 2, 5 are the order list number

现在我来到这里,我不知道如何根据订单列表获得排名:(

希望我的问题可以理解

谢谢

1 个答案:

答案 0 :(得分:3)

首先,我要考虑稍微改变您的架构。目前添加好友意味着添加列(这也意味着更新您的查询)。最好先说一下朋友桌,然后再找一张朋友姓名评级表。

然而,根据您所获得的位置计算得分是:

10-((score-1)*2)

鉴于此,我们可以创建一个查询来获取名称的分数:

SELECT id, name, 10-((riccardo-1)*2) + 10-((roberto-1)*2) as score-- Plus all other names
FROM names
ORDER BY score

使用更常见的架构,查询看起来像:

SELECT names.id, names.name, SUM(10-((names_ratings.rating-1)*2)) as score
FROM names
LEFT JOIN names_ratings ON (names.id = names_rating.name_id)
ORDER BY score

第二个查询意味着您可以更轻松地添加和删除朋友,这不会更改代码或数据库架构。