Wpis z mikrobloga

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.

#sql #php #webdev
  • 17
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@epi: sql limit zawsze używałem do określania zakresu od góry, albo od dołu. Nie mam pomysłu jak zacząć pobierać dane od "środa" zwróconych rekordów.
  • Odpowiedz
@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 ;)
  • Odpowiedz
  • 0
Sory za niedomówienie. Chodziło mi o bazę mysql ;-) Za chwilę wezmę sie za sprawdzanie waszych odpowiedzi.

Wielkie dzięki :-)
  • Odpowiedz
@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).
  • Odpowiedz
@NiktNieTroszczy: Używając offsetu to właśnie robisz. Lepiej używać indeksów:

SELECT * FROM tabels WHERE .... AND id > :last_result LIMIT 20
Poza tym nie napisałem "nie używaj" tylko żeby mieć to na uwadze.
  • Odpowiedz
@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
  • Odpowiedz
@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.
  • Odpowiedz