Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pobieranie danych porcjami?
phpmack
post
Post #1





Grupa: Zarejestrowani
Postów: 55
Pomógł: 1
Dołączył: 11.06.2011

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


Witam, potrzebuje pobrać dane z bazy porcjami np. po 10 wyników.
Na danych jest wykonywany szereg operacji i nie mam możliwości "pamiętania" globalnie jakiegoś indeksu które dane pobrałem a które nie.
Wygląda to tak jak bym wykonał kilka niezależnych zapytań do DB i za każdym razem dostał kolejną porcje danych.

Aplikacja oparta jest na Zend Framework 1xx.

Pzdr.
Go to the top of the page
+Quote Post
phpion
post
Post #2





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




No to poza odpowiednim LIMIT + OFFSET niewiele zdziałasz. Chyba, że pokombinujesz z osobną tabelą, do której zapiszesz identyfikatory już przetworzonych rekordów i przy każdym wywołaniu pobierzesz tylko te, które w tej tabeli się nie znajdują.
Go to the top of the page
+Quote Post
phpmack
post
Post #3





Grupa: Zarejestrowani
Postów: 55
Pomógł: 1
Dołączył: 11.06.2011

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


No właśnie zależy mi na rozwiązaniu które by działało na samej bazie bo inaczej bym musiał przerobić pół aplikacji;/
A czy przed użyciem LIMIT + OFFSET i muszę sortować tablice aby otrzymać "kolejne porcje" danych a nie przypadkowe dane pasujące do zapytania?
No i przed każdym wywołania zapytania musiał bym pobrać max ilość rekordów w tablicy...
Go to the top of the page
+Quote Post
Pyton_000
post
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Cytat
A czy przed użyciem LIMIT + OFFSET i muszę sortować tablice aby otrzymać "kolejne porcje" danych a nie przypadkowe dane pasujące do zapytania?

nie, dostajesz po kolei tak jak są zapisane
Cytat
No i przed każdym wywołania zapytania musiał bym pobrać max ilość rekordów w tablicy...

Do czego? Jeżeli do tego "paczkowania" to nie ma sensu, bo jak podasz limit i offset poza zasięgiem bazy to Ci nic nie zwróci ot co.

Możesz też zadeklarować w bazie zmienną która będzie trzymała offset pobranych danych. Za każdym pobraniem dodawać do zmiennej offset. A jak dojdzie do tego że offset będzie już poza zakresem to zerujesz czy co tam chcesz.
Go to the top of the page
+Quote Post
phpmack
post
Post #5





Grupa: Zarejestrowani
Postów: 55
Pomógł: 1
Dołączył: 11.06.2011

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


Cytat(Pyton_000 @ 20.02.2014, 19:39:10 ) *
nie, dostajesz po kolei tak jak są zapisane

Do czego? Jeżeli do tego "paczkowania" to nie ma sensu, bo jak podasz limit i offset poza zasięgiem bazy to Ci nic nie zwróci ot co.

Możesz też zadeklarować w bazie zmienną która będzie trzymała offset pobranych danych. Za każdym pobraniem dodawać do zmiennej offset. A jak dojdzie do tego że offset będzie już poza zakresem to zerujesz czy co tam chcesz.


Rzeczywiście zwraca pusty wynik w przypadku błędnego limitu i offsetu, ale chyba już zostawię tak jak mam.
Zapytanie z COUNT(*) chyba nie jest bardzo kosztowne? Pobraną ilość rekordów wykorzystuje do licznika po stronie klienta i do przerwania kolejnych wywołań... hmmm może zmienię to w ramach refaktoringu smile.gif
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 Aktualny czas: 20.08.2025 - 04:50