Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jak wstawić numer pozycji po sortowaniu ?
sbx
post 25.03.2010, 19:56:30
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 22.09.2006

Ostrzeżenie: (0%)
-----


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

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
erix
post 25.03.2010, 19:57:50
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Zajrzyj do FAQ ~nospora: http://nospor.pl


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
sbx
post 25.03.2010, 20:43:02
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 22.09.2006

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
erix
post 25.03.2010, 21:03:08
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
sbx
post 25.03.2010, 21:19:30
Post #5





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 22.09.2006

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Mchl
post 25.03.2010, 21:40:09
Post #6





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


to pokaż kod
Go to the top of the page
+Quote Post
sbx
post 25.03.2010, 22:30:22
Post #7





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 22.09.2006

Ostrzeżenie: (0%)
-----


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





Go to the top of the page
+Quote Post
zend
post 25.03.2010, 23:05:30
Post #8





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
sbx
post 26.03.2010, 00:35:41
Post #9





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 22.09.2006

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
phpion
post 26.03.2010, 07:51:46
Post #10





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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;");
Go to the top of the page
+Quote Post
Mchl
post 26.03.2010, 09:40:55
Post #11





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


Poza tym nie jestem pewien czy @i może być indeksem tablicy w PHP. Użyj raczej aliasu w zapytaniu.
Go to the top of the page
+Quote Post
nospor
post 26.03.2010, 09:48:44
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




moze byc. Bledem było to co napisał już phpion


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
sbx
post 26.03.2010, 16:32:47
Post #13





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 22.09.2006

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Mchl
post 26.03.2010, 16:54:27
Post #14





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


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 :-/
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 8.07.2025 - 07:15