Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Zmiana sql na php
Forum PHP.pl > Forum > Przedszkole
matixrr
Mam takie zapytanie:

  1. SET @username='test1',@nr = 0, @idnr = 0;
  2. SELECT @idnr AS nr FROM (SELECT @nr:=@nr+1,IF(USERNAME=@username, @idnr := @nr,@idnr=@idnr),username FROM user WHERE punkty >=0 ORDER BY punkty DESC) podsel WHERE podsel.username = @username;


Dzięki niemu mogę wyliczyć pozycję dla @username pod względem ilości punktów.

W phpMyAdmin ładnie to działa, czyli otrzymuje odpowiednia pozycję (dla użytkownika test1 jest to 7).

Chciałbym wiedzieć jak to przekształcić do PHP... Nie wiem do końca co zrobić aby potem w echo wywołać jakąś zmienną i otrzymywać pozycję...


Liczę na szybką pomoc party.gif
phpion
  1. <?php
  2. mysql_query("set @username='test1',@nr = 0, @idnr = 0");
  3. $q = mysql_query('select @idnr as nr from (SELECT @nr:=@nr+1,if(USERNAME=@username, @idnr := @nr,@idnr=@idnr),username FROM user where punkty >=0 order by punkty DESC) podsel where podsel.username = @username');
  4.  
  5. while ($r = mysql_fetch_assoc($q)) {
  6. // tu juz wiesz co dalej
  7. // tudziez bez while() jesli zwraca 1 wynik
  8. }
  9. ?>
matixrr
Niestety, ale:

Cytat
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\Program Files\WebServ\httpd-users\test.php on line 14
phpion
Wyświetl sobie mysql_error() i zobacz co w nim siedzi.
matixrr
Cytat
Illegal mix of collations (latin2_general_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation '='



I czy później wystarczy echo $r, czy trzeba może echo $r[nr] ?
nospor
Cytat
I czy później wystarczy echo $r, czy trzeba może echo $r[nr] ?
Nie mogles sprawdzic?
$r to tablica, wiec musisz sie do niej dobierac jak do tablicy
sowiq
@phpion,
nie lepiej zamiast:
  1. <?php
  2. mysql_query("set @username='test1',@nr = 0, @idnr = 0");
  3. $q = mysql_query('select @idnr as nr from (SELECT @nr:=@nr+1,if(USERNAME=@username, @idnr := @nr,@idnr=@idnr),username FROM user where punkty >=0 order by punkty DESC) podsel where podsel.username = @username');
  4. ?>

zrobić:
  1. <?php
  2. $username = 'test1';
  3. $nr = 0;
  4. $idnr = 0;
  5. $q = mysql_query("select $idnr as nr from (SELECT $nr:=$nr+1,if(USERNAME=$username, $idnr := $nr,$idnr=$idnr),username FROM user where punkty >=0 order by punkty DESC) podsel where podsel.username = $username");
  6. ?>
? Wychodzi dokładnie na to samo, a nie wykonujesz 2 zapytań, tylko jedno.

[edit]
Sorry za wypisywanie głupot haha.gif

@down,
jeszcze mi weekend w głowie szumi, ale właśnie kończę kawę z Kubka Programatora i dochodzę powoli do siebie winksmiley.jpg
nospor
@sowiq nie obraz sie, ale co ty za bzdury wypisujesz? Zamieniasz zmienne mysql na zmienne php i mowisz ze wychodzi dokladnie to samo? Zalamka.... tongue.gif
matixrr
Cytat(nospor @ 1.06.2009, 10:07:41 ) *
Nie mogles sprawdzic?
$r to tablica, wiec musisz sie do niej dobierac jak do tablicy


Nie mogłem bo nie działa a jest to mój pierwszy kontakt z takim zapytaniem gdzie między innymi występują zmienne MySql i stąd też moje problemy...
golaod
  1. <?php
  2. print_r($r);
  3. mysql_errors();
  4. ?>


To wszystko co Ci potrzebne by samemu tak proste rzeczy robić zamiast zawalać ludzi tym.
nospor
Cytat
a jest to mój pierwszy kontakt z takim zapytaniem gdzie między innymi występują zmienne MySql i stąd też moje problemy...
zmienne nie mają tu nic do gadania. dane w php odbierasz z zapytania na identycznej zasadzie co z normalnego zapytania bez zmiennych

Cytat
Nie mogłem bo nie działa

Przeciez dostales blad:
Cytat
Illegal mix of collations (latin2_general_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation '='

czego nie rozumiesz? porownujesz ze sobą pola, ktore mają ustawione inne kodowanie. Ustaw dla kazdego z pol to samo kodowanie
matixrr
No właśnie sęk w tym, że założyłem tabelę nową tylko z kolumną user a w niej tylko 2 kolumny z username i punkty i oczywiście wszędzie dając to samo kodowanie a i tak nie działało... Spróbuje to zaraz ogarnąć na jakimś serwerze. Może coś mam nie tak na localhoście.

Cytat
zmienne nie mają tu nic do gadania. dane w php odbierasz z zapytania na identycznej zasadzie co z normalnego zapytania bez zmiennych

Tego właśnie nie wiedziałem i potrzebna mi była taka odpowiedź! Dzięki!
nospor
Cytat
oczywiście wszędzie dając to samo kodowanie a i tak nie działało...
bo oprocz kodowania musisz ustawic jeszcze collation
matixrr
Odgrzeje kotleta aby podziękować wszystkim za pomoc i zainteresowanie tematem.

W poście wyżej miałem na myśli iż wszędzie ustawiłem ten sam sposób porównywania lecz ciągle otrzymywałem błąd. Rozwiązanie okazało się strasznie proste a mianowicie wystarczyło przed zapytaniami dodać:
Kod
mysql_query("SET CHARACTER SET latin2");

i wszystko działa! smile.gif
erix
To skoro odgrzałeś, to jeszcze tag dodaj. [;
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.