Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Problem z wyciąganiem danych.
Forum PHP.pl > Forum > Przedszkole
kowalik1
Witam. Zrobiłem sobie ranking, który używa bazy MySQL. Mam tabele 'users' i są w niej kolumny nick, punkty. Wyświetlam wszystkie wyniki bez problemu używam do tego takiego kodu:

  1. SET @MyRowNum :=0;
  2. SELECT punkty, @MyRowNum := @MyRowNum +1 AS miejsce, nick
  3. FROM users ORDER BY punkty DESC;


Otóż problem w tym, że chciałbym podając tylko nick, pokazać miejsce które zajął by ten użytkownik na tle innych. Dodałem
  1. WHERE nick='admin'


wpisałem tak:

  1. SET @MyRowNum :=0;
  2. SELECT punkty, @MyRowNum := @MyRowNum +1 AS miejsce, nick
  3. FROM users WHERE nick='admin'
  4. ORDER BY punkty DESC;


Wyświetla się tylko admin, ale nie ważne czy będzie mieć nawet 0 punktów, zawsze zajmie 1 miejsce.
Robię coś takiego pod stronkę, żeby po zalogowaniu widzieć na którym jestem miejscu w rankingu.

Tutaj ktoś miał identyczny problem: http://www.experts-exchange.com/Database/M...Q_21039662.html ale żeby zobaczyć odpowiedzi trzeba mieć wykupione konto.
Jakieś pomysły ? Tylko mnie nie odsyłajcie do google bo szukałem długo, a nie mam zbyt wiele czasu bo pisze z kompa od kolegi:/

EDIT:

Znalazłem takie rozwiązanie, niby wszystko działa..

  1. $q = "SELECT punkty, nick from users ORDER BY punkty DESC;";
  2.  
  3. $dane = mysql_query($q);
  4. echo "Miejsce Nick Punkty<br>";
  5. $miejsce = "0";
  6. while( $row = mysql_fetch_array( $dane ) )
  7. {
  8. $miejsce = ($miejsce+1);
  9. IF($row[nick]=="admin"){
  10. echo "<br>";
  11. echo "$miejsce $row[nick] $row[punkty]";
  12. exit();
  13. }
  14. }


Tylko pozostaje mi jedno pytanie, jak długo będzie to przetwarzał serwer jeśli w bazie danych będzie jakieś 5000 rekordów ?
spoon-pl
pewnie długo, może możesz ograniczyć aby pokazywać np tylko 1 dziesiątkę, wtedy na końcu zapytania SQL dodaj słowo kluczowe LIMIT 0, 10


a prawdę mówiąc zrobił bym to tak:

$query = "SELECT count(*) FROM users WHERE punkty > (SELECT punkty FROM users WHERE nick='admin')";
$result = mysql_query($query);
$row = mysql_fetch_row($result);
$miejsce = $row[0];

$query = "SELECT punkty FROM users WHERE nick='admin'";
$result = mysql_query($query);
$row = mysql_fetch_row($result);
$punkty = $row[0];

i wyświetlił

pierwszy Query zlicza ci ile jest rekordów w których pole punkty jest większe niż admin co daje ci miejsce
a drugi Query to wybranie punktów dla admina
kowalik1
O thx. Twój sposób jest o dużo lepszy, takie proste, ale jednak na to nie wpadłem tongue.gif

mała poprawka(jeśli nikt nie byłby lepszy od nas to zamiast miejsca 1. pokazało by sie miejsce 0., ale to drobiazg):

  1. $miejsce = ($row[0]+1);
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.