Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Ranking
tamin
post 17.03.2004, 17:49:53
Post #1





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 6.09.2003

Ostrzeżenie: (0%)
-----


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).
Go to the top of the page
+Quote Post
shima
post 17.03.2004, 18:23:20
Post #2





Grupa: Zarejestrowani
Postów: 245
Pomógł: 0
Dołączył: 9.09.2002

Ostrzeżenie: (0%)
-----


Daj fragment kodu, przynajmniej zapytania do bazy, bo łatwiej się przerabia niż pisze od podstaw.


--------------------
Nie ma nic stałego prócz zmiany...
Go to the top of the page
+Quote Post
Wankster
post 17.03.2004, 18:41:09
Post #3





Grupa: Zarejestrowani
Postów: 208
Pomógł: 0
Dołączył: 19.04.2003

Ostrzeżenie: (0%)
-----


[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]
Go to the top of the page
+Quote Post
shima
post 17.03.2004, 19:27:59
Post #4





Grupa: Zarejestrowani
Postów: 245
Pomógł: 0
Dołączył: 9.09.2002

Ostrzeżenie: (0%)
-----


[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]


--------------------
Nie ma nic stałego prócz zmiany...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 21:42