![]() |
![]() ![]() |
![]() |
![]()
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. |
|
|
![]()
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ą.
|
|
|
![]()
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... |
|
|
![]()
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. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 55 Pomógł: 1 Dołączył: 11.06.2011 Ostrzeżenie: (0%) ![]() ![]() |
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 ![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 04:50 |