anonīms Posted May 28, 2009 Report Share Posted May 28, 2009 Fiška tāda. ir DB ar komandām | Nosaukums | Ratings | | Team1 | 415 | | Team3 | 567 | | Team1137 | 863 | Katrai komandai ir sava statistikas lapa (?id=$_GET['id']) Vēlos izveidot, teiksim Ranks: (Vieta kurā komanda atrodas pēc reitinga). Piemēram Team3 pēc reitinga ir 2 un lai viņai arī rādas 2 vieta. Quote Link to comment Share on other sites More sharing options...
marcis Posted May 28, 2009 Report Share Posted May 28, 2009 Es ieteiktu, mainot datus rating kolonā, pārrēķināt visiem to ranku. Vienīgais variants, kas man ienāca prātā, kā to izdarīt sql pusē: SELECT *, rating AS myrating, (SELECT COUNT(DISTINCT(rating))+1 FROM `table` WHERE rating>myrating) AS rank FROM `table` WHERE id=$id Testēts, protams, nav. Quote Link to comment Share on other sites More sharing options...
anonīms Posted June 7, 2009 Author Report Share Posted June 7, 2009 kods iet ideāli, bet ir viena problēma. Komandām, kam reitings ir vienāds rāda vienādus rankus. Kā varētu izveidot, lai komandām nav vienādi ranki (Man ienāca galvā sagrupēt varbūt pēc alfabēta vai kaut ko tādu...) Quote Link to comment Share on other sites More sharing options...
marcis Posted June 7, 2009 Report Share Posted June 7, 2009 Nu idejiski jau tā arī sanāk, ka komandām, kurām ir vienāds rezultāts, ir vienāda vieta topā. Neizskatās parāk labi, bet kāpēc, lai tikai nosaukuma dēļ, es būtu zemākā vietā par kādu citu? Quote Link to comment Share on other sites More sharing options...
anonīms Posted June 8, 2009 Author Report Share Posted June 8, 2009 Nu jā. Īpaši godīgi tas nebūtu, bet tomēr vajag kaut ko izdomāt, lai rangi nebūtu vienādi. Quote Link to comment Share on other sites More sharing options...
anonīms Posted December 25, 2009 Author Report Share Posted December 25, 2009 Ceļu augšā tematu, turpinot iesākto tēmu. Mēģināju visādi locīt kodu, bet nekā. Tātad joprojām par to pašu. $overview_kverijs = mysql_query("SELECT *, reitings AS myrating, (SELECT COUNT(DISTINCT(reitings))+1 FROM ".PREFIX."komandas WHERE reitings>myrating ORDER BY nosaukums DESC) AS rank FROM ".PREFIX."komandas ORDER BY rank LIMIT $from, $max_results") or die(mysql_error()); Komandām ar vienādu reitingu ir vienāds rangs. Ideja - papildus reitingam pielikt, lai pārbauda pēc ID. Tātad tiks dota priekšroka komandām, kuras ir ātrāk izveidotas/reģistrētas. Kā varētu dabūt to gatavu? Papētīju papildus arī distinct, bet tāpat nesapratu. Teorētiski itkā viss skaidrs. // ja rangs ir vienads, tad čekojam pēc ID, jo zemāka ID, jo augstāka vieta. Quote Link to comment Share on other sites More sharing options...
2easy Posted December 26, 2009 Report Share Posted December 26, 2009 2 easy ^^ function qs($s) { // sagatavo stringu for mysql query return is_null($s) ? 'NULL' : "'" . mysql_real_escape_string($s) . "'"; } function go($sSql) { // mysql query ar error reportingu $h = mysql_query($sSql) or die('<b>mysql error ' . mysql_errno() . ':</b> ' . mysql_error() . '<br /><b>query:</b> ' . substr($sSql, 0, 1000)); return $h; } function teamLoad() { // izveido/ielādē testa datus: 10 komandas, no kurām dažām ir vienādi reitingi go('DROP TABLE IF EXISTS Team'); go('CREATE TABLE Team (Id int AUTO_INCREMENT, Title varchar(100) NOT NULL, Rating int NOT NULL, Rank int NOT NULL, PRIMARY KEY (Id), INDEX (Rating, Id), INDEX (Rank)) ENGINE=MyISAM'); go('INSERT Team (Title, Rating, Rank) VALUES ' . '(' . qs('a1') . ', 150, 0), ' . '(' . qs('a2') . ', 120, 0), ' . '(' . qs('b1') . ', 10, 0), ' . '(' . qs('b2') . ', 100, 0), ' . '(' . qs('c1') . ', 150, 0), ' . '(' . qs('c2') . ', 40, 0), ' . '(' . qs('d1') . ', 10, 0), ' . '(' . qs('d2') . ', 100, 0), ' . '(' . qs('e1') . ', 80, 0), ' . '(' . qs('e2') . ', 10, 0)' ); } function teamRankUpd() { // updeito rankus visām komandām (vēlams izpildīt 1x: pēc tam, kad ir veiktas visas izmaiņas reitingos) go('SET @iRank = 0'); go('UPDATE Team SET Rank = @iRank := @iRank + 1 ORDER BY Rating DESC, Id ASC'); } function teamEcho($sOrd = '') { echo '<table cellpadding="1" cellspacing="0" border="1" style="float: left; margin-right: 20px"><tr><th>Id</th><th>Title</th><th>Rating</th><th>Rank</th></tr>'; $h = go('SELECT * FROM Team ' . $sOrd); while ($r = mysql_fetch_array($h)) echo '<tr><td>' . $r['Id'] . '</td><td>' . $r['Title'] . '</td><td>' . $r['Rating'] . '</td><td>' . $r['Rank'] . '</td></tr>'; echo '</table>'; } teamLoad(); teamEcho('ORDER BY Rating DESC, Id ASC'); teamRankUpd(); teamEcho('ORDER BY Rank ASC'); Quote Link to comment Share on other sites More sharing options...
anonīms Posted December 26, 2009 Author Report Share Posted December 26, 2009 uh :) Malacis. Iet ideāli Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.