Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobieranie danych porcjami?
Forum PHP.pl > Forum > Bazy danych > MySQL
phpmack
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.
phpion
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ą.
phpmack
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...
Pyton_000
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.
phpmack
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
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.