Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dodatkowa kolumna lp
Forum PHP.pl > Forum > Bazy danych > MySQL
mihmih
witam,

mam kwerendę, w której chciałbym mieć dodatkową kolumnę porządkową LP. Znalazłem w necie takie cos jak rownum, ale nie wiem co zrobić żeby ta kolumna na sztywno zaczynała mi się od jedynki i szła w dół. Teraz mam kolejność przypadkową, a z ORDER BY też przypadkową, ale już inną. Poniżej moje zapytanie:




  1. SELECT
  2.  
  3. @rownum:=@rownum+1 AS `lp`,
  4.  
  5.  
  6.  
  7. AVG( REPLACE( ROUND( ( `oceny`.`ID_kryt1` * `waga1` + `oceny`.`ID_kryt2` * `waga2` + `oceny`.`ID_kryt3` * `waga3` + `oceny`.`ID_kryt4` * `waga4` ) / ( `waga1` + `waga2` + `waga3` + `waga4` ), 2 ), '.', ',' ) ) AS `srednia`, `zamawiajacy`.`ID_zamawiajacego`, `zamawiajacy`.`nazwa_firmy`, AVG( `oceny`.`ID_kryt1` ), AVG( `oceny`.`ID_kryt2` ), AVG( `oceny`.`ID_kryt3` ), AVG( `oceny`.`ID_kryt4` ) FROM { oj `firma`.`oceny` AS `oceny` RIGHT OUTER JOIN `firma`.`zakupy` AS `zakupy` ON `oceny`.`ID_zakup` = `zakupy`.`ID_zakupu` }, `firma`.`zamawiajacy` AS `zamawiajacy`, `firma`.`wagi_ocen` AS `wagi_ocen`, (SELECT @rownum:=0) r WHERE `zakupy`.`ID_sprzedajacego` = `zamawiajacy`.`ID_zamawiajacego` GROUP BY `zamawiajacy`.`ID_zamawiajacego` ORDER BY `srednia`



Co należy zmienić aby pierwszy wiersz już po ORDER BY miał "jedynkę", drugi "dwójkę" itd?
nospor
http://nospor.pl/mysql-faq.html#faq-6
mihmih
dodanie wiersza:

  1. SET @rownum=0;


na początku nie pomaga, wyskakuje błąd. Chyba że coś źle zrozumiałem z poradnika z linka...
nospor
SET @rownum=0;
to ma byc jako oddzielne zapytanie a nie wkladasz to do tego samego zapytania
mihmih
ok, zrobiłem tak, ale dalej kolejność mam przypadkową: 5,2,7,8,1,.......
nospor
pokaz caly kod pozmianach
mihmih
ja niestety bawię się w Libreoffice Base więc żadnego kodu pokazać nie mogę. Ale jest tam bezpośrednie wpisywanie komend do MySqla i kwerendy bezpośrednio robione w MySqlu i kwerenda z mojego pierwszego postu, po wpisanym poleceniu SET.... daje przypadkową kolejność kolumny LP
nospor
Nie mam za duzo czasu na analize, ale czy ty przypadkiem tutaj:
SELECT @rownum:=0 + group
nie psujesz tego i owego? Czemu nagle zerujesz te zmienna?
mihmih
no rzeczywiście, część z GROUP BY dałem do podzapytania i chyba wszystko teraz gra:





  1. SELECT
  2.  
  3. @rownum:=@rownum+1 AS `lp`, `srednia`, `ID_zamawiajacego`, `nazwa_firmy`, sr_kryt4, sr_kryt1, sr_kryt2, sr_kryt3 FROM (
  4.  
  5.  
  6.  
  7. SELECT AVG( REPLACE( ROUND( ( `oceny`.`ID_kryt1` * `waga1` + `oceny`.`ID_kryt2` * `waga2` + `oceny`.`ID_kryt3` * `waga3` + `oceny`.`ID_kryt4` * `waga4` ) / ( `waga1` + `waga2` + `waga3` + `waga4` ), 2 ), '.', ',' ) ) AS `srednia`, `zamawiajacy`.`ID_zamawiajacego`, `zamawiajacy`.`nazwa_firmy`, AVG( `oceny`.`ID_kryt1` ) AS sr_kryt1, AVG( `oceny`.`ID_kryt2` ) AS sr_kryt2, AVG( `oceny`.`ID_kryt3` ) AS sr_kryt3, AVG( `oceny`.`ID_kryt4` ) AS sr_kryt4 FROM { oj `firma`.`oceny` AS `oceny` RIGHT OUTER JOIN `firma`.`zakupy` AS `zakupy` ON `oceny`.`ID_zakup` = `zakupy`.`ID_zakupu` }, `firma`.`zamawiajacy` AS `zamawiajacy`, `firma`.`wagi_ocen` AS `wagi_ocen`, (SELECT @rownum:=0) r WHERE `zakupy`.`ID_sprzedajacego` = `zamawiajacy`.`ID_zamawiajacego` GROUP BY `zamawiajacy`.`ID_zamawiajacego`) AS tabela

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.