加入多个表并按行总和排序

时间:2015-02-28 07:27:11

标签: php mysql

最近开始研究配对系统,在这个系统中有2个表。一个表用于匹配,一个表用于排名。

排名表就像这样开始

table_ranks:

date
playeruid
rank

table_matches:

date
playeruid
playerpoints

我现在试图通过他们的积分来命令玩家。但是,为了做到这一点,我提出了一个问题:

SELECT * FROM table_ranks ORDER by rank DESC

但是现在我意识到,我需要在排名上添加玩家点数。所以基本上,我需要将玩家点数添加到玩家的当前排名。所以,如果我有一个示例行:

table_ranks:

2/20/15
Player1
56

table_matches:

2/27/15
Player1
5

我需要构建一个查询,它接受玩家1的56,在匹配中查找玩家1以及它看到的任何地方,它需要添加他的5个点,使其成为56的总和。一旦确定它将按此值排序,以确定谁用什么排名。我该如何开始查询?我理解为了加入表格,我需要这样开始:

“table_ranks中的SELECT table_ranks。,table_matches。,table_matches按RANK排序...”

然后要完成它,我将不得不取得等级的当前值,然后抓住它所指的特定玩家并获取所有匹配并将所有玩家点加到他的等级然后确定如何通过

2 个答案:

答案 0 :(得分:2)

试试这个:

SELECT r.playeruid, r.date AS rank_date, m.date AS macthes_date, 
       (r.rank + m.playerpoints) AS total_points  
FROM table_ranks r INNER JOIN table_matches m ON r.playeruid = m.playeruid  
ORDER BY total_points DESC

此查询假定playeruid在两个表中都是唯一的。

答案 1 :(得分:1)

尝试以下查询。我在类似的结构上测试了它应该可以工作

 SELECT * , playeruid AS player_id, (
    SELECT SUM( playerpoints ) 
    FROM  `table_matches` 
    WHERE playeruid = player_id
 ) AS points
 FROM table_ranks 
 ORDER BY points DESC