Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Numerownie wyników zapytania
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
Baumi
Witam, Przejdę może od razu do rzeczy. Potrzebuję ponumerować wyniki zapytania jeszcze na etapie jego wykonywania. Chodzi mi dokładnie o coś takiego, że jak wykonam select'a na tabeli otrzymam w wyniku kolejne numery od jeden i wartość, np:

1 10.56
2 14.00
3 18.34
itd...

Szukałem sposobu na to, ale nie znalazlem... Myslalem jeszcze nad uzyciem zmiennej, ktora po prostu bede inkrementowal, ale to rowniez mi nie wypalilo... Ma ktos jakies pomysly?

Pewnie zapytacie takze do czego jest mi to potrzebne... otoz mam serie wartosci, ktore chce przedstawic na grafie... tyle, ze wartosci jest multum (+- 10.000), tak wiec aby szybko stworzyc graf postanowilem wyswietlac jedynie 288 wartosci... moglbym pobrac wszystkie z bazy i na pozimie aplikacji zagregowac je, jednak wolalbym zrobic to na poziomie zapytania. Problem jest taki, ze chce zaagregowac powiedzmy 50 wartosci, pozniej kolejne 50 i tak dalej... Postanowilem zrobic to w ten sposob, ze uzyje funkcji modulo... Niech numer kolejnego wyniku nazywa sie _NUM, wiec jesli pogrupuje tak:

group by (_NUM - _NUM % 288) dostane dokladnie to o co mi chodzi... nie wiem tylko jak ponumerowac te wyniki...
Sedziwoj
Czy dobrze rozumiem, chcesz grupować krotki po 50 i potem wszystkie grupy aby stanowiły wynik?
(właśnie od opisu problemu powinieneś zacząć, nie opisu jak próbujesz rozwiązać, bo czasem podchodzimy nie od tej strony co trzeba, każdemu się może zdarzyć)
Baumi
Dzięki za zainteresowanie smile.gif Chce pogrupować krotki po 50 i owe grupy mają być wynikiem zapytania. Zakładając, że chce grupować po 50 to przy 1000 rekordów otrzymam 20 wierszy wynikowych. Wisz może jak to zrobić?
michalg
Witam,

Nie wiem, czy po takim czasie przyda się to autorowi pytania, ale jeśli kogoś to interesuje, to w postgresqlu można osiągnąć numerowania wyników za pomocą sekwencji:

CREATE TEMP SEQUENCE "lp" START 1;
SELECT nextval('lp'), * FROM tabela;

SELECT setval('lp', 1, false);

SELECT nextval('lp'), * FROM tabela2;

TEMP oznacza sekwencję tymczasową - trwa ona na czas połączenia z bazą danych. W przypadku, gdy zachodzi potrzeba wykonania kilku zapytań z numerowaniem w ramach danego połączenia, to trzeba przed każdym resetować sekwencję (setval) lub usuwać i tworzyć na nowo.
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.