Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak wstawić numer pozycji po sortowaniu ?
Forum PHP.pl > Forum > Bazy danych > MySQL
sbx
np. mamy dwie kolumny (name, pos) i po wykonaniu:
  1. SELECT * FROM tabela ORDER BY name DESC;

chciałbym wstawić do pos="numerowy pozycji którą zajmuje po sortowaniu"

Chodzi mi o to by to zrobić wydajnie, najlepiej w jednym zapytaniu, czy to możliwe, ma ktoś jakiś pomysł ?

Pozdrawiam

erix
Zajrzyj do FAQ ~nospora: http://nospor.pl
sbx
Dziękuje, wszystko fajnie, rozumiem logikę, lecz problem mam z zadziałaniem tego zapytania smile.gif

  1. SET @i=0; SELECT @i:=@i+1 pos FROM tabela ORDER BY name DESC;


Dokładnie chodzi o inicjalizacje zmiennej (set @i=0;)

MySQL Query Browser traktuje to jako dwie osobne komendy, przez to ze na końcu inicjalizacji zmiennej jest (;)

Wykonując to samo z PHP też nie jest lepiej.

Jak to zrobić ? smile.gif

Pozdrawiam
erix
2x mysql_query. I nie sugeruj się tym, że są dwa zapytania. To pierwsze wykona się w 0.0000000000000001 sekundy, czyli tak, jakby go nie było. winksmiley.jpg

A jak już tak bardzo chcesz w jednym -> wtedy stwórz sobie widok w MySQL.
sbx
2x mysql_query. <- oczywiście od razu tak też sprawdziłem niestety nie działa, jakiegoś pecha mam bo przecież zapytanie jest logiczne. Przynajmniej mnie się takie wydaje. smile.gif
Mchl
to pokaż kod
sbx
Za dużo by cały kod wklejać i później to czytać ale przykład:

  1. mysql_connect("localhost", "root", "");
  2.  
  3. $result = mysql_query("select 2+2;");
  4. /* TO DZIALA */
  5. $row = mysql_fetch_assoc($result);
  6. echo $row['2+2']."<br/>";
  7.  
  8. /* A TU DUPA BLADA - NIC, NULL, SAME <BR> W WYNIKU*/
  9. mysql_query("set @i=555;");
  10. mysql_query("select @i;");
  11. $row = mysql_fetch_assoc($result);
  12. echo $row."<br/>";
  13. echo $row['@i']."<br/>";


Sprawdzałem na localhost i home.pl



To samo lokalnie pod konsolą MYSQL działa bez problemu:
mysql> set @i=555;
Qery OK.....
mysql> select @i;
wyświetla poprawnie wynik


Dokładnie, tak jak być powinno -> http://dev.mysql.com/doc/refman/5.0/en/user-variables.html

Denerwuje mnie to bardzo. sad.gif

Może ktoś ma pomysł ?

Pozdrawiam





zend
Spróbuj podziałać na prepared statement w mysqli smile.gif Ja orłem z baz danych nie jestem i tak sobie radze smile.gif
sbx
Cytat(zend @ 25.03.2010, 23:05:30 ) *
Spróbuj podziałać na prepared statement w mysqli smile.gif Ja orłem z baz danych nie jestem i tak sobie radze smile.gif


Jeśli nie będę zmuszony to nie chce kombinować od dupy strony, bo rozwiązanie z definicją zmiennej jest proste zgrabne i na temat, tylko dlaczego do kur... nie działa !?questionmark.gif

pozdrawiam smile.gif
phpion
Cytat(sbx @ 26.03.2010, 00:35:41 ) *
dlaczego do kur... nie działa !?questionmark.gif

Bo nie przypisałeś wyniku zapytania do żadnej zmiennej.
  1. $result = mysql_query("select @i;");
Mchl
Poza tym nie jestem pewien czy @i może być indeksem tablicy w PHP. Użyj raczej aliasu w zapytaniu.
nospor
moze byc. Bledem było to co napisał już phpion
sbx
hahahhahahaha ten błąd ubawił mnie dzisiaj smile.gif

pomijając tą "literówkę" winksmiley.jpg i tak jestem zdziwiony ponieważ,

przykład poniżej wyświetla poprawny wynik w PHP, lecz nie zapisuje go w DB:

  1. mysql_query("SET @i=0;");
  2. $result = mysql_query("SELECT @i:=@i+1 rank, score from players ORDER BY score DESC;");
  3. while ($row = mysql_fetch_assoc($result)) {
  4. print_r($row);
  5. echo "<br/>";
  6. }

...a rozumiem że zapytanie powinno zapisać wartość @i do kolumny rank, tak ?



oczywiście to nie problem bo działa przez update:
  1. mysql_query("SET @i=0;");
  2. mysql_query("UPDATE players SET rank=(@i:=@i+1) ORDER BY score DESC;");



lecz analogicznie do poprzedniego to tez powinno działać lecz inkrementacja nie działa, dlaczego ?
  1. mysql_query("UPDATE players SET rank=(if(@i, @i:=@i+1, @i:=9)) ORDER BY score DESC;");




To żaden problem, ale może komuś będzie się chciało odpowiedzieć, dlaczego dwa wymienione przykłady nie działają.

Pozdrawiam. smile.gif
Mchl
Cytat
...a rozumiem że zapytanie powinno zapisać wartość @i do kolumny rank, tak ?


Nie. SELECT tylko wyświetla dane.

Cytat
lecz analogicznie do poprzedniego to tez powinno działać lecz inkrementacja nie działa, dlaczego ?


U mnie działa :-/
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.