Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ranking
Forum PHP.pl > Forum > PHP
tamin
Mam tabelke ranking w mysqlu:

id | nazwa | licznik

i teraz mam powiedzmy 50 rekordow w tej tabelce. Niektore maja jednakowy stan licznika.

1. Jakie zapytania zadac bazie zeby pokazalo mi aktualne miejsce w rankingu dla rekordu o podanym id?

Chcialbym zeby miejsca byly pokazywane tak:

miejsce | nazwa | wejsc

1. nazwa 31
2. nazwa2 28
3. nazw1 25
3. nazw5 25

Czyli jak dwa rekordy maja taka sama liczbe wejsc to zajmuja to samo miejsce.

I nie mam pojecia jak wyswietlic miejsce konkretnego rekordu i jak wyswietlic pierwsze 10 miejsc (moze to byc wiecej niz 10 rekordow, bo licza sie miejsca w rankingu).
shima
Daj fragment kodu, przynajmniej zapytania do bazy, bo łatwiej się przerabia niż pisze od podstaw.
Wankster
[php:1:8921f10028]<?php

// pobieranie pol id, nazwa, licznik do zmiennej $rows
// SELECT id, nazwa, licznik FROM ranking ORDER BY licznik DESC

$rows = array
(
array( 2, 'Wankster' , 666 ),
array( 1, 'Cudi' , 665 ),
array( 6, 'Seth' , 575 ),
array( 10,'itsme' , 575 ),
array( 7, 'GrayHat' , 123 ),
array( 8, 'kawiateek', 103 ),
array( 4, 'Sh4dow' , 43 ) ,
array( 3, 'Cichy' , 31 ) ,
array( 9, 'Anubis' , 31 ) ,
array( 5, 'kubatron' , 31 )
);

function sortRanking( &$arrRanking )
{
$ranking = array();

foreach ( $arrRanking AS $key => $value )
{
$k = placeExists( $value[2], $ranking );
$p = $k !== false ? $ranking[ $k ][0] : getLastPlace( $ranking );

$ranking[] = $k !== false ? array( $p, $value[1], $value[2] ) : array( $p, $value[1], $value[2] );
}

$arrRanking = $ranking;
}

function placeExists( $intHits, $arrRanking )
{
foreach ( $arrRanking AS $k => $v )
{
if ( $v[2] == $intHits ) return $k;
}

return false;
}

function getLastPlace( $arrRanking )
{
static $place = 1;

foreach ( $arrRanking AS $k => $v )
{
if ( $place === $v[0] ) $place = $v[0] + 1;
}

return $place;
}

sortRanking( $rows );

print 'Ranking:';

foreach ( $rows AS $k => $v )
{
print "n " . $v[0] . '. ' . $v[1] . ': ' . $v[2];
}

?>[/php:1:8921f10028]

1. Określony ID[sql:1:8921f10028]SELECT nazwa, licznik FROM ranking WHERE id = $jakisTamId LIMIT 1[/sql:1:8921f10028]
2. Pierwsze x miejsc[sql:1:8921f10028]SELECT id, nazwa, licznik FROM ranking ORDER BY licznik DESC LIMIT x[/sql:1:8921f10028]
shima
[php:1:6e9b836157]<?php
$z = "SELECT id, nazwa, licznik FROM ranking
ORDER BY licznik DESC LIMIT 5";
//ściąga już posortowane
$aktualna_pozycja = 1; //pierwszy ma numer 1
$aktualny_licznik = 3000000;
/*licznik w kosmos -> musi być większy od
największego w bazie*/
$p = mysql_query($z);
while ($aktu = mysql_fetch_array($p))
{
$ranking[$aktu['id']]= $aktualna_pozycja;
if ($aktu['licznik'] < $aktualny_licznik)
{
$aktualny_licznik=$aktu['licznik'];
$aktualna_pozycja++;
}
}
//tutaj masz tablicę id=>pozycja, dopasować już pewnie umiesz
foreach ($ranking as $k=>$v) //sprawdzam czy dobrze wypisuje
{
echo $k.'=>'.$v.'<br>';
}
//jeżeli nie chcesz bawić się z dodatkowym dopasowywaniem, to podmień $aktu[id]
//na $aktu['nazwa']
?>[/php:1:6e9b836157]
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.