Jak sformułować zapytanie w SQL aby wyświetlać część zwróconych wierszy? Załóżmy że zapytanie zwróciło 100 wierszy, a ja chciałbym wyświetlić wiersze od 1-10, a innym razem np od 40 do 50.
@Ginden: z niepodawaniem bazy SQL, jest jak z niepodawaniem miasta. Jeśli ktoś nie podał miasta, znaczy że Warszawa (i warszawiak ;)). Jeśli powiedział, że SQL, to można założyć że MySQL ;)
@Meteor100: Uważaj, bo używanie OFFSET (LIMIT z dwoma parametrami) bardzo nieefektywnie się skaluje - baza czyta cały wynik do pamięci (a czasem na dysk) i dopiero później odrzuca offset. Zobacz tutaj: Efficient Pagination Using MySQL (nie widzę linka do filmiku, ale sprawdź na YT pod tym samym tytułem).
@MQs: hmm z tego co wiem to baza liczy wszystkie elementy od 0 do OFFSETu, i od tego momentu bierze LIMIT jaki sobie ustawiliśmy, na pewno nie są pobierane wszystkie rekordy
@Meteor100: Nie wiem co miałbym napisać ponadto co jest w linku, który podałem. Zresztą i tak niepotrzebnie się wtrąciłem - skoro pytasz o takie podstawy to raczej nie grozi twojej aplikacji obciążenie z którym offset miałby ciężko, więc podpada pod premature optimization.
#sql #php #webdev
LIMIT 0, 20
następnie wiersze 20-40:
LIMIT 20,20
itd...
W PostgreSQL też będzie błąd, trzeba użyć LIMIT i OFFSET
Jeśli ktoś nie podał miasta, znaczy że Warszawa (i warszawiak ;)). Jeśli powiedział, że SQL, to można założyć że MySQL ;)
Wielkie dzięki :-)
SELECT * FROM tabels WHERE .... AND id > :last_result LIMIT 20
Poza tym nie napisałem "nie używaj" tylko żeby mieć to na uwadze.
Normalne bazy streamują do uzyskania odpowiednich rekordów.