Jump to content
php.lv forumi

izvadam kurā vietā ir pēc kaut kā


anonīms

Recommended Posts

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

  • 2 weeks later...

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...)

Link to comment
Share on other sites

  • 6 months later...

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.

Link to comment
Share on other sites

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');

team-rank_1261836730.png

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...