我想为锦标赛分配一组积分,其中第一名获得10分,第二名获得9分,依此类推。然后我想要结合拥有相同球队名称的球员的分数和任何没有球队的球员(null)都没有得分。然后返回团队名称(team.title)和id(team.team_id),其中得分最多。
$TOTW = $db->fetchAll("SELECT tournyplayer.finishplace, user.username, team.title as teamname, team_member.member_state ".
"FROM tournyplayer ".
"JOIN user ON user.user_id = tournyplayer.userid ".
"LEFT JOIN team_member ON team_member.user_id = user.user_id ".
"LEFT JOIN team ON team.team_id = team_member.team_id ".
"JOIN tourny ON tourny.id = tournyplayer.multitrnyid ".
"WHERE tourny.title = 'Team Game' ".
"ORDER BY tourny.endtime DESC, tournyplayer.finishplace ASC ".
"LIMIT 10");
// Used for testing results
foreach($TOTW AS $rowName => $results){
if ($results["teamname"] === null OR $results["member_state"] === "request") $results["teamname"] = '-';
print "<pre>";
echo '<h1 align="center"><b>' . $results['username'] . '</b> finished ' . $results['finishplace'] . ' from Team ' . $results['teamname'] . '</h1>';
print "</pre><br />";
}
返回类似的内容。
+-------------+----------+----------+
| finishplace | username | teamname |
+-------------+----------+----------+
| 1 | Andy | Team B |
+-------------+----------+----------+
| 2 | Bob | Team B |
+-------------+----------+----------+
| 3 | Cole | NULL |
+-------------+----------+----------+
| 4 | Dillon | Team A |
+-------------+----------+----------+
| 5 | Ernie | Team A |
+-------------+----------+----------+
| 6 | Frank | Team A |
+-------------+----------+----------+
| 7 | George | Team C |
+-------------+----------+----------+
| 8 | Herman | NULL |
+-------------+----------+----------+
| 9 | Ike | Team B |
+-------------+----------+----------+
| 10 | Joe | Team A |
+-------------+----------+----------+
通过这个例子,A队获得19分,B队获得21分,C队获得4分,另外两名成员因没有参加团队而获得0分。因此,B队将成为获胜的球队,因为他们获得的分数最多。在2个或更多球队拥有相同分数的情况下,“决胜局”将由排名最高的球队确定。
我只能通过愚蠢的运气得到结果,并且几个小时试图找出连接,因为我还在学习MySQL和PHP。因为我刚开始,我不知道该怎么做。任何帮助将不胜感激。
答案 0 :(得分:0)
我不会为您编写代码,但会提供一些提示,以便您可以解决问题。如果提示不够,请分享表格详细信息,我会尽力为您提供实际的SQL。
你需要在这里做几个技巧。一个人的观点是10-finishplace-1。因此,在您的选择查询中添加一个包含公式的列。准备好此查询后,可以使用此查询创建视图,然后使用简单的select sum()查询和group by teamname。
或者,您可以使用子查询。但是,视图比子查询更有效。