Taylor_1978
10-04-2006, 07:07 PM
Howdy,
I have a rather long query... this is it:
$select = mysql_query("SELECT
R.uid,
R.rank,
U.alias,
U.membership,
R.premium,
R.rating,
sum((M.wid=R.uid AND M.season='$LINFO[season]')+(M.lid=R.uid AND M.season='$LINFO[season]')) as PMplayed,
sum(M.wid=R.uid AND M.season='$LINFO[season]') as PMwon,
sum(M.wid=R.uid AND M.season='$LINFO[season]' AND M.diff='HIGHER') as PMwonHIGHER,
sum(M.wid=R.uid AND M.season='$LINFO[season]' AND M.diff='SAME') as PMwonSAME,
sum(M.wid=R.uid AND M.season='$LINFO[season]' AND M.diff='LOWER') as PMwonLOWER,
sum(M.lid=R.uid AND M.season='$LINFO[season]') as PMlost,
sum((M.wid=R.uid AND M.season='$LINFO[season]' AND M.diff='HIGHER')+(M.wid=R.uid AND M.season='$LINFO[season]' AND M.diff='HIGHER')+(M.wid=R.uid AND M.season='$LINFO[season]' AND M.diff='HIGHER')+(M.wid=R.uid AND M.season='$LINFO[season]' AND M.diff='SAME')+(M.wid=R.uid AND M.season='$LINFO[season]' AND M.diff='SAME')+(M.wid=R.uid AND M.season='$LINFO[season]' AND M.diff='LOWER')-(M.lid=R.uid AND M.season='$LINFO[season]')) as points,
R.penalty,
sum((M.wid=R.uid AND M.season='$LINFO[season]' AND M.diff='HIGHER')+(M.wid=R.uid AND M.season='$LINFO[season]' AND M.diff='HIGHER')+(M.wid=R.uid AND M.season='$LINFO[season]' AND M.diff='HIGHER')+(M.wid=R.uid AND M.season='$LINFO[season]' AND M.diff='SAME')+(M.wid=R.uid AND M.season='$LINFO[season]' AND M.diff='SAME')+(M.wid=R.uid AND M.season='$LINFO[season]' AND M.diff='LOWER')-(M.lid=R.uid AND M.season='$LINFO[season]'))-(R.penalty) as TP
FROM ranks R LEFT JOIN matchdb M ON M.ladder=R.ladder LEFT JOIN users U ON U.id=R.uid
WHERE M.ladder='$_REQUEST[ladder]' AND division='$division'
GROUP BY R.uid
ORDER BY TP DESC") or die(mysql_error());
while($row = mysql_fetch_array($select)){
$rank++;
mysql_query("UPDATE ranks SET rank='$rank' WHERE uid='$row[uid]' AND ladder=$ladder AND division=$division");
} // while
Basically what this does is counts how many times a player has won a game against someone ranked in a higher divsion (awards 3 points), same division (awards 2 points) and lower division (awards 1 point) and how many losses (takes away 1 point) and places them in order of their total points.
My problem is, I want it to order by points but only those who have actually played first, and then anyone who hasnt played to be ordered after it. But at current, someone who has lost 1 game and has -1, is ranked lower than someone who hasnt played and has 0 points.
I'm not sure how to go about changing this query to suit what I'm after. Any ideas?
Thansk in advance! :thumbsup:
I have a rather long query... this is it:
$select = mysql_query("SELECT
R.uid,
R.rank,
U.alias,
U.membership,
R.premium,
R.rating,
sum((M.wid=R.uid AND M.season='$LINFO[season]')+(M.lid=R.uid AND M.season='$LINFO[season]')) as PMplayed,
sum(M.wid=R.uid AND M.season='$LINFO[season]') as PMwon,
sum(M.wid=R.uid AND M.season='$LINFO[season]' AND M.diff='HIGHER') as PMwonHIGHER,
sum(M.wid=R.uid AND M.season='$LINFO[season]' AND M.diff='SAME') as PMwonSAME,
sum(M.wid=R.uid AND M.season='$LINFO[season]' AND M.diff='LOWER') as PMwonLOWER,
sum(M.lid=R.uid AND M.season='$LINFO[season]') as PMlost,
sum((M.wid=R.uid AND M.season='$LINFO[season]' AND M.diff='HIGHER')+(M.wid=R.uid AND M.season='$LINFO[season]' AND M.diff='HIGHER')+(M.wid=R.uid AND M.season='$LINFO[season]' AND M.diff='HIGHER')+(M.wid=R.uid AND M.season='$LINFO[season]' AND M.diff='SAME')+(M.wid=R.uid AND M.season='$LINFO[season]' AND M.diff='SAME')+(M.wid=R.uid AND M.season='$LINFO[season]' AND M.diff='LOWER')-(M.lid=R.uid AND M.season='$LINFO[season]')) as points,
R.penalty,
sum((M.wid=R.uid AND M.season='$LINFO[season]' AND M.diff='HIGHER')+(M.wid=R.uid AND M.season='$LINFO[season]' AND M.diff='HIGHER')+(M.wid=R.uid AND M.season='$LINFO[season]' AND M.diff='HIGHER')+(M.wid=R.uid AND M.season='$LINFO[season]' AND M.diff='SAME')+(M.wid=R.uid AND M.season='$LINFO[season]' AND M.diff='SAME')+(M.wid=R.uid AND M.season='$LINFO[season]' AND M.diff='LOWER')-(M.lid=R.uid AND M.season='$LINFO[season]'))-(R.penalty) as TP
FROM ranks R LEFT JOIN matchdb M ON M.ladder=R.ladder LEFT JOIN users U ON U.id=R.uid
WHERE M.ladder='$_REQUEST[ladder]' AND division='$division'
GROUP BY R.uid
ORDER BY TP DESC") or die(mysql_error());
while($row = mysql_fetch_array($select)){
$rank++;
mysql_query("UPDATE ranks SET rank='$rank' WHERE uid='$row[uid]' AND ladder=$ladder AND division=$division");
} // while
Basically what this does is counts how many times a player has won a game against someone ranked in a higher divsion (awards 3 points), same division (awards 2 points) and lower division (awards 1 point) and how many losses (takes away 1 point) and places them in order of their total points.
My problem is, I want it to order by points but only those who have actually played first, and then anyone who hasnt played to be ordered after it. But at current, someone who has lost 1 game and has -1, is ranked lower than someone who hasnt played and has 0 points.
I'm not sure how to go about changing this query to suit what I'm after. Any ideas?
Thansk in advance! :thumbsup: