Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Pobranie 10 wierszy ze środka tabeli
Forum PHP.pl > Forum > Przedszkole
Demoneos
Gdyby chodziło o pobranie 10 wierszy z początku lub końca tabeli, to oczywiście użyłbym limit 10. Natomiast gdy chcę pobrać gdzieś ze środka tabeli, to pierwszą rzeczą jaka mi przeszła na myśl, to wykorzystanie pola id:
  1. SELECT * FROM tabela WHERE id BETWEEN 50 AND 60

ale problem w tym, że gdy się usunie rekordy z tabeli, to id się nie przesuwa tylko pozostaje takie same, więc to opada.
Więc jak to zrobić?
1. Może zrobić jakieś dodatkowe pole "nr_kolejnego_wiersza" - przy wstawianiu nowego wiersza inkrementowałbym ilość dotychczasowych wierszy w tabeli i wpisał tą wartość do tego pola. Czy to dobry pomysł?
2. Drugim rozwiązaniem byłoby pokombinowanie w MySQL - najpierw wyświetlam np. od 50 wiersza do końca i z tego 10 pierwszych wierszy. Tylko jak do zaimplementować w MySQL?
Shili
  1. SELECT * FROM tabela LIMIT 10


To to samo, co:

  1. SELECT * FROM tabela LIMIT 0, 10

Zero to od którego rekordu, 10 to ile rekordów

http://dev.mysql.com/doc/refman/5.0/en/select.html
Wyszukaj sobie słów limit, są tam ładne przykłady poniżej smile.gif
Demoneos
Heh, no to będzie dużo prościej niż myślałem smile.gif

Cytat(Shili @ 17.12.2011, 14:33:34 ) *
  1. SELECT * FROM tabela LIMIT 0, 10


Chodzi mi generalnie o to, żeby pobierać 10 wierszy z tabeli. Jeżeli odczytuję wiersze od początku tabeli, to sprawa jest prosta, np.:
Pierwsza dziesiątka:
  1. SELECT * FROM tabela LIMIT 0, 10

Druga dziesiątka:
  1. SELECT * FROM tabela LIMIT 9, 10


A jeżeli chciałbym, żeby pobierał od końca tabeli? To znaczy jak pobrać np. ostatnią i przedostatnią dziesiątkę wierszy?
webdice
  1. SELECT * FROM `tabela` ORDER BY `id` LIMIT 10


i analogicznie.
thek
Ustawiasz ORDER BY z domyślnego kierunku na przeciwny. Domyślam się, że nie masz domyślnego sortowania, więc baza korzysta z klucza głównego rosnąco, czyli masz niejawne wywołanie ORDER BY id ASC... Zrób więc ORDER BY id DESC i teraz rób ten LIMIT jak Ci już napisano.
Demoneos
Czyli np. aby otrzymać przedostatnie 10 wierszy poniższe zapytanie będzie prawidłowe?
  1. SELECT * FROM `tabela` ORDER BY `id` DESC LIMIT 9 10
thek
A to nie prościej sprawdzić od razu zamiast pytać? wink.gif Wrzuć zapytanie do bazy i sprawdź to się dowiesz snitch.gif Tylko nie zapomnij o przecinku w LIMT (jak ma to miejsce powyżej).
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.