Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php & mysql] Najlepszy sposob na pobranie kilku wierszy z bazy MySQL
Forum PHP.pl > Forum > Przedszkole
PiXel2.0
Mam zamiar napisac forum korzystajace z bazy MySQL (wczesniej napisalem kilka malych for na plikach).
Gdy pisalem forum oparte o pliki (odpowiedzi byly w tablicy z pliku) to aby dzielic posty na strony robilem tak:

$posty - tablica sekwencyjna z postami pobrana z pliku
$odp_na_str - ilosc odpowiedzi na jednej stronie
$_GET['strona'] - numer strony wyslany przez klienta (poczawszy od 0)

  1. <?php
  2. ...
  3. for($i = $odp_na_str * $_GET['strona']; $i < $odp_na_str * ($_GET['strona'] + 1) and $i < count($posty); $i++){
  4. // kod petli gdzie $posty[$i] to tresc odpowiedzi
  5. }
  6. ...
  7. ?>


W przypadku gdy posty sa w tablicy to byl to chyba najlepszy i najszybszy sposob na pobranie konkretnej ilosci postow dla konkretnej strony.
Natomiast gdy mam korzystac z bazy to widze kilka sposobow na pobranie kilku wierszy, ale kazdy ma jakas wade.

posty - nazwa tabeli w ktorej kazdy wiersz zawiera dane odpowiedzi
$odp_na_str - ilosc odpowiedzi na jednej stronie
$_GET['strona'] - numer strony wyslany przez klienta (poczawszy od 0)

SPOSOB 1.

  1. <?php
  2. ...
  3. $result = mysql_query('SELECT * FROM posty WHERE post_id > '.($odp_na_str * $_GET['strona']).' AND post_id <= '.($odp_na_str * ($_GET['strona'] + 1)));
  4. while($post = mysql_fetch_row($result)){
  5. // kod petli gdzie $post to tablica z danymi odpowiedzi
  6. }
  7. ...
  8. ?>


powyzszy sposob sprawdza sie gdy kolumna post_id jest kluczem podstawowym typu AUTO_INCREMENT
zaleta tego rozwiazania jest mala ilosc pobieranych zasobow
wada jest to, ze nie mozna usuwac odpowiedzi z bazy

SPOSOB 2.

  1. <?php
  2. ...
  3. $result = mysql_query('SELECT * FROM posty');
  4. if(mysql_data_seek($result, $odp_na_str * $_GET['strona']))
  5. for($i = 0; $post = mysql_fetch_row($result) and $i < $odp_na_str; $i++){
  6. // kod petli gdzie $post to tablica z danymi odpowiedzi
  7. }
  8. ...
  9. ?>


powyzszy sposob jest bardziej uniwersalny, ale pobiera cala tabele z bazy

Czy jest jakis inny lepszy sposob dzielenia postow z bazy na strony w przypadku takiego prostego forum questionmark.gif
Cysiaczek
tak. W zapytaniu stosujesz klauzulę LIMIT, która pozwala wybrać rekordy z konkretnego przedziału. musisz jedynie zadbać o przezkazanie numeru strony.

Pozdrawiam.
PiXel2.0
Czyli taki kod bedzie najwydajniejszy questionmark.gif

  1. <?php
  2. ...
  3. $result = mysql_query('SELECT * FROM posty LIMIT '.($odp_na_str * $_GET['strona']).', '.$odp_na_str);
  4. while($post = mysql_fetch_row($result)){
  5. // kod petli gdzie $post jest tablica ktorej elementami sa komorki rekordu
  6. }
  7. ...
  8. ?>


Dzieki za pomoc, pozdrawiam 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.