我有两张桌子(MySQL):玩家和分数。在分数表中以这种方式存储年度分数:
player_id | 2002 | 2003 | 2004
1 | 5 | 6 | 4
2 | 3 | 2 | 5
Etc.
我编写了以下代码,根据去年的分数进行排名。
$extract = mysql_query("SELECT * FROM players AS p, scores AS s WHERE p.player_id =s.player_id ORDER BY s.2004 desc");
while ($row = mysql_fetch_assoc($extract)) {
$name = $row['name'];
$score = $row['2004'];
if ($row['2004'] < $row['2003']) {
$value = "-";
}
else if ($row['2004'] > $row['2003']) {
$value = "+";
}
else if ($row['2004'] == $row['2003']) {
$value = "=";
}
echo "<b>".$name."</b> | ".$score." ".$value."<br>\n";
}
但是这段代码有两大问题:
1)在查询中我必须指定去年(ORDER BY s.2004),所以如果我在分数表中添加另一列(例如2005),我必须手动更改代码。
2)“$ value”var也是如此。如果我加上2005年,那么2004年和2003年之间的比较就会出错(应该是2005年到2004年之间)。
我知道我必须使用循环和数组但是......怎么样?
答案 0 :(得分:0)
您应重新设计scores
表格,以便将player_id,得分和年份存储在一行中。所以,每个分数都有自己的排。当您发现自己重复列时,通常会朝错误的方向前进。
然后,您的查询将如下所示:
选择年份(CURDATE());
select *
from players p
inner join scores s on p.player_id = s.player_id
where s.`Year` = Year(CURDATE()) --or (select max(Year) from Score)