Olen tehnyt yksinkertaisen pistesivun jossa sivu listaa kannasta käyttäjien pisteet ja laittaa ne paremmuusjärjestykseen. Tarkoitus olisi tulostaa parhaat 20 tulosta pelkästään. Ajattelin et jos tekis tohon vielä semmoisen et sivuille kirjautuneen käyttäjän pisteet ja sijoitus tulisi näiden 20 tuloksen jälkeen omalle riville. Nyt on vaan ongelma etten tiedä miten sen tekis että toi rivinumero jatkuis siellä. Onko ideoita?
<?php $haku=mysql_query("SELECT s_nickname,s_scores FROM scores28 ORDER BY s_scores DESC"); echo "<table cellpadding=\"2\">"; echo "<tr><td></td><td bgcolor=#CCCCCC><b>User</b></td><td bgcolor=#CCCCCC><b>Score</b></td></tr>"; for ($i = 0; $i < mysql_num_rows($haku); $i++) { $sijoitus =$i+1; $user = mysql_result($haku, $i, "s_nickname"); $score = mysql_result($haku, $i, "s_scores"); echo "<tr><td><b>$sijoitus</b></td> <td>$user</td> <td align=center><font color=red><b>$score</b></font></td> </tr>"; } echo "</table>"; ?>
Hehee, mites jos kahdella kaverilla on tasapisteet. Silloinhan kummallakin on sama sija ja heitä seuraavalla taasen ei olekkaan järjestyksessä seuraava sija. Nimim. vastaavanlaisen kanssa paininut :)
Ja itse kysymykseen: Entä jos kaveri on jo top-20-listalla. Silloinhan nimi voisi olla boldattuna top-listalla ja vain muussa tapauksessa sijoituksen tulostaisi listan alle. Ja ei kai siinä muuta, kuin että haet kaikki tulokset ja looppaat ne läpi. Ja loopissa vähän ehtoja peliin:
1: jos sija pienempi kuin 21 => tulostetaan
1.1: jos oma nimi => tulostetaan boldattuna
2: jos sija suurempi kuin 20 ja oma sijoitus huonompi kuin 20 => tulostetaan väli-viiva erottamaan varsinaisesta listasta, muuten voidaan lopettaa silmukka
2.1:jos oma nimi => tulostetaan ja lopetetaan silmukka
Suoraan omasta tuotoksesta:
Function Get_position($game, $score = 0, $type = 0, $cutoff = 0) // Return position for score { global $txt, $scripturl, $db_prefix; global $ID_MEMBER; global $context, $user_info, $db_prefix; if ($type == 0) { $query = "SELECT count(*) from {$db_prefix}games_high WHERE score > {$score} AND game='{$game}' AND stime >= $cutoff"; } else { $query = "SELECT count(*) from {$db_prefix}games_high WHERE score < {$score} AND game='{$game}' AND stime >= $cutoff"; } $res = db_query($query, __FILE__, __LINE__); $pos = mysql_fetch_array($res); mysql_free_result($res); return $pos[0] + 1; }
Tolla saa sijoituksen.
$haku=mysql_query("SELECT s_nickname,s_scores FROM scores28 ORDER BY s_scores DESC"); --> $haku=mysql_query("SELECT s_nickname,s_scores FROM scores28 ORDER BY s_scores DESC LIMIT 0,20");
Aihe on jo aika vanha, joten et voi enää vastata siihen.