私のコードはこれです:
public function procAllianceAttRanking($limit="") {
$q = "SELECT " . TB_PREFIX . "users.id userid, " . TB_PREFIX . "users.username username, " . TB_PREFIX . "users.alliance allyid, (
SELECT SUM( " . TB_PREFIX . "vdata.pop )
FROM " . TB_PREFIX . "vdata
WHERE " . TB_PREFIX . "vdata.owner = userid
)totalpop, (
SELECT SUM( " . TB_PREFIX . "alidata.Aap )
FROM " . TB_PREFIX . "alidata
WHERE " . TB_PREFIX . "alidata.id = allyid
)totalpoint, (
SELECT COUNT( " . TB_PREFIX . "users.alliance )
FROM " . TB_PREFIX . "users
WHERE " . TB_PREFIX . "users.alliance = allyid
)totalusers
FROM " . TB_PREFIX . "users
WHERE " . TB_PREFIX . "users.alliance > 0
ORDER BY totalpoint DESC, allyid ASC $limit";
return mysql_query($q);
}
出力コードは次のとおりです。
$sql = $ranking->procAllianceRanking();
$query = mysql_num_rows($sql);
if($query >= 1){
while($row = mysql_fetch_array($sql)){
if($row['allyid'] == $session->alliance) {
echo "<tr class=\"hl\"><td class=\"ra fc\" >".$rank.".</td>";
}else {
echo "<tr class=\"hover\"><td class=\"ra \" >".$rank.".</td>";
}
echo "<td class=\"al \" ><a href=\"allianz.php?aid=".$row['allyid']."\">".$database->getAllianceName($row['allyid'])."</a></td>";
echo "<td class=\"pla \" >".$row['totalusers']."</td>";
echo "<td class=\"av \">".round($row['totalpop']/$row['totalusers'])."</td>";
echo "<td class=\"po lc\">".$row['totalpop']."</td></tr>";
$rank++;
}
}
コードの出力は次のとおりです。
Greatest Alliance
Alliance player Ø points
1. multii 3 4 11
2. multii 3 2 6
3. multii 3 2 6
4. myallianc 2 5 5
5. myallianc 2 1 2
しかし、これは正しくありません!!! . 各アライアンスの実際のトラビアンでは、統計では1行にすぎないため、コードの出力は間違っています。各アライアンスの正しい出力は次のようになります。
Greatest Alliance
Alliance player Ø points
1. multii 3 8 23
2. myallianc 2 6 7
すべてのアライアンスは 1 行のみである必要があります