Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: MySQL - Liczba Porządkowa
Forum PHP.pl > Forum > PHP
esiek
Siema mam taki problem. Mam w MySQL tabelę z użytkownikami czyli zarejestrowanymi osobami. Teraz chciałbym wiedzieć jako który z koleji się zarejestrował. Albo jako który na liście jest alfabetycznie bez odczytywania całej bazy danych. w tym celu wiadomo sortowanie tabeli Według Daty rejestracji, czy nazwy uzytkownika ORDER BY `data_rejestracji` ASC. czy jest zapytanie SQL zwracające mi od razu lizbe porządkowąquestionmark.gif
nospor
http://nospor.pl/mysql-faq-n25.html#faq-8
esiek
Rewelacja winksmiley.jpg o to mi chodzilo ale nie moge sobie poradzic ze stworzeniem kodu php pod to.

  1. $sql = "set @id=0,@nr = 0, @idnr = 0;
  2. select @idnr as nr from (SELECT @nr:=@nr+1,if(ID=@id, @idnr := @nr,@idnr=@idnr),
  3. ID FROM `skills` where `uid`='".$_SESSION['uid']."' order by technika DESC) podsel where podsel.ID = @id";
  4. $run = mysql_query( $sql );
  5.  
  6.  
  7. while( $row = mysql_fetch_array( $run ) )
  8.  
  9.  
  10. echo$row['id'];
  11.  
krowal
Spróbuj to rozbić na dwa zapytania:
  1. <?php
  2. $sql = "set @id=0,@nr = 0, @idnr = 0";
  3. mysql_query( $sql );
  4.  
  5. $sql = "select @idnr as nr from (SELECT @nr:=@nr+1,if(ID=@id, @idnr := @nr,@idnr=@idnr), ID FROM `skills` where `uid`='".$_SESSION['uid']."' order by technika DESC) podsel where podsel.ID = @id";
  6. $run = mysql_query( $sql );
  7. ?>
esiek
  1. $sql = "set @id=0,@nr = 0, @idnr = 0";
  2. mysql_query( $sql );
  3.  
  4. $sql = "SELECT @idnr AS nr FROM (SELECT @nr:=@nr+1,if(ID=@id, @idnr := @nr,@idnr=@idnr),
  5. ID FROM `skills` WHERE `uid`='xxx' ORDER BY `kasa` DESC) podsel WHERE podsel.ID = @id";
  6.  
  7. $run = mysql_query("$sql");
  8. while($row = mysql_fetch_array($run))
  9. {echo$row['id'];}



teraz mam tak

i wywala dalej Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in
erix
A co pokazuje mysql_error?
esiek
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\www\Game\index.php on line 30
1064: Something is wrong in your syntax obok 'SELECT @nr:=@nr+1,if(ID=@id, @idnr := @nr,@idnr=@idnr), ID FR' w linii 1

narazie ma taki scrypt ktory dziala

ale jak bedzie wieksza liczba uzytkownikow to serwer nie wyrobi ;/
dlatego chce to samo przedstwawic w postaci jednego zapytania winksmiley.jpg
  1. $pozycja=1;
  2. $zapytanie = "SELECT * FROM `users` ORDER BY `login` ASC" ;
  3. $wykonaj = mysql_query("$zapytanie");
  4. while($wiersz = mysql_fetch_array($wykonaj))
  5. {
  6. if($wiersz['uid'] == $_SESSION['uid'])
  7. {
  8. echo"$pozycja";
  9. }
  10. $pozycja=$pozycja+1;
  11. }
erix
Cytat
ale jak bedzie wieksza liczba uzytkownikow to serwer nie wyrobi ;/

Niby w jaki sposób? Deklarując zmienne? Mogę Ci zajeździć bazę 1 ogromnym zapytaniem, a nawet nie zauważysz 200 malutkich. Nie w liczbie tkwi zajeżdżanie.
krowal
Btw. możesz zrobić jeszcze inaczej:
  1. <?php
  2. $query = 'SELECT u.*, (SELECT count(u2.id) FROM users AS u2 WHERE u2.login < u.login) AS position FROM users AS u GROUP BY u.id ORDER BY u.position ASC';
  3. ?>

Przy tym rozwiązaniu musi być jednak spełniony jeden warunek, pola po których obliczasz 'position' (w tym przypadku pole 'login') muszą być unikalne.
esiek
powiem ci ze za h*ja nie rozumie tego zapytania... no moze troszeczke wiec zostane przy swoim rozwiazaniu smile.gif
krowal
No proszę Ciebie, przecież to proste zapytanie winksmiley.jpg
Chodzi o to, że chcąc sprawdzić pozycję pojedynczego rekordu względem innych rekordów używając konkretnego sortowania - do jej określenia używasz podzapytania które zliczy Ci ilość elementów które są przed szukanym rekordem (są mniejsze niż szukany rekord) winksmiley.jpg
nospor
Cytat
Something is wrong in your syntax obok 'SELECT @nr:=@nr+1,if(ID=@id, @idnr := @nr,@idnr=@idnr), ID FR' w linii 1
A jaką ty masz wersje mysql?
esiek
naweet nie wiem. mam krasnala 2.7.5
nospor
to sprawdź smile.gif
poczytaj w googlo jak sprawdzic wersje mysql. albo znajdz z jaką wersje przychodzi ten twoj krasnal w tej wersji co podales.
bo blad wskazuje jakbys mial jakąś starą

edit:
sam sprawdzilem. W sklad tego krasnala wchodzi STAROC mysql 3.
Na tym mysql nie działają podzapytania, ktorych tu uzylem. Obecna wersja mysql to 5. Zainstaluj sobie serwerek z akutalną wersją mysql a przynajmniej z 4.2
Jak wogóle można jeszcze pracować na takim starociu...
thek
Sam kiedyś krasia używałem, ale to było już lata wstecz. Zrezygnowałem, gdy pewne zapytania przestały mi działać a według manuala nie miały prawa nie ruszyć. Sprawdzenie wersji i kopara w dół że tam jeszcze 3.X chodziło, skoro ściągane z ich homepage'a. Dopiero dokładne przyjrzenie konfigowi sprawiło, że wolałem pakiety osobno ściągać i instalować. Ale po jakimś czasie, z wygody, wamp winksmiley.jpg
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.