![]() |
![]() ![]() |
![]() |
![]()
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). |
|
|
![]()
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...
|
|
|
![]()
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] |
|
|
![]()
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...
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 18.07.2025 - 21:42 |