Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php & mysql] Najlepszy sposob na pobranie kilku wierszy z bazy MySQL
PiXel2.0
post
Post #1





Grupa: Zarejestrowani
Postów: 110
Pomógł: 13
Dołączył: 16.03.2007
Skąd: Łódź

Ostrzeżenie: (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 (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #2





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




tak. W zapytaniu stosujesz klauzulę LIMIT, która pozwala wybrać rekordy z konkretnego przedziału. musisz jedynie zadbać o przezkazanie numeru strony.

Pozdrawiam.
Go to the top of the page
+Quote Post
PiXel2.0
post
Post #3





Grupa: Zarejestrowani
Postów: 110
Pomógł: 13
Dołączył: 16.03.2007
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Czyli taki kod bedzie najwydajniejszy (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 12:50