Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Stronnicowanie wyników z bazy.
Forum PHP.pl > Forum > Przedszkole
maxil
Witam mam problem z skryptem stronicowania.
Otóż mam kod na stronie, on ładnie wyświetla numerki ale nie wiem gdzie dopisać pętle żeby wyświetlać te wyniki żeby to wyglądało tak:

CODE
jakaś treść wyciągnięta z bazy danych

1 | 2 | 3 | 4 | 5 | ... | >>


te numerki wyświetla mi ładnie jak już mówiłem ale nie wyświetla tekstu odpowiedniego dla danej strony.

a oto kod stronnicowania:

  1. <?php
  2. $query="SELECT * FROM tabela ORDER BY id DESC";
  3.  
  4.  $sql_num=mysql_query($query);
  5.  $ile=mysql_num_rows($sql_num);
  6.  $limit=10;// ilosc linkow
  7.  $limit_linkow=20;//ile wynikow na stronie
  8.  $count=ceil($ile/$limit_linkow);
  9.  $page = (isset($_GET['page'])) ? (int)$_GET['page'] : 1;
  10.  if (($page < 1) || ($page > $count)) $page = 1;
  11.  
  12.  if ($count > $limit) {
  13.  
  14.  $start = $page - floor($limit / 2);
  15.  if ($start < 1) $start = 1;
  16.  
  17.  $end = $start + $limit - 1;
  18.  if ($end > $count) {
  19.    $end = $count;
  20.    $start = $end - $limit;
  21.  }
  22.  
  23.  } else {
  24.    $start = 1;
  25.    $end = $count;
  26.  }
  27.  
  28.  $pgback = $page - 1;
  29.  $pgnext = $page + 1;
  30.  
  31.  if ($page >1) echo"<a href=\"?id=test&amp;page=$pgback\"><< poprzednia</a>";
  32.  for ($x=$start;$x<=$end;$x++) {
  33.  
  34.    if ($x != $page) {
  35.     $t = $x;
  36.  
  37.     echo " <a href=\"?id=test&amp;page=$x\">$t</a>\n ";
  38.    } else echo " <b>[$x]</b> ";
  39.  
  40.  }
  41.  if ($page < $count) echo"<a href=\"?id=test&amp;page=$pgnext\">nastepna >></a>\n";
  42.  $start = $page * $limit_linkow-$limit_linkow;
  43.  $query_page=$query." limit $start,$limit_linkow";
  44.  $result=mysql_query($query_page);
  45. ?>


jeśli ktoś był by w stanie mi pomóc był bym wdzięczny

Pozdro...
Fifi209
Nie chce mi się przeglądać tego skryptu ale po zapytaniu widzę że do stronnicowania mu daleko.

Poczytaj o BETWEEN w mysql
maxil
a może jednak ktoś sie skusi i mi pomoże ;]
Spawnm
fifi dał ci wskazówkę , ja dodam abyś poczytał o LIKE w sql, teraz ty wygooglaj o czym mówimy , pomyśl a zobaczysz że daliśmy ci rozwiązanie , lecz nie gotowca smile.gif
nospor
Cytat
Poczytaj o BETWEEN w mysql

Cytat
fifi dał ci wskazówkę ,

Yyy, a co ma between do stronicowania?
Spawnm
da się na nim zrobić stronicowanie, sam kiedyś zrobiłem winksmiley.jpg
Ale LIKE lepszy
nospor
a czemu nie uzyc LIMIT, ktore do tego wlasnie jest stworzone. BETWEEN sluzy zupelnie do czego innego, o LIKE juz nie wspomne blinksmiley.gif
Spawnm
oj, źle mi się napisało tongue.gif Miał być LIMIT ...
nospor
@spawnm , @fifi napiszcie mi prosze stronicowanie przy pomocy between bo jestem ciekaw jak to ma wygladac. Nawet jesli jakims cudem wam sie to uda to w czym to niby ma byc lepsze od LIMIT, ktore notabene tutaj zostalo uzyte przez autora
Spawnm
Spoko, w weekend ci napiszę/podeśle smile.gif
A że LIMIT lepszy to wiem.
nospor
jesli masz na mysli takie uzycie BETWEEN jak to sie robi stronicowanie w ORACLEu to ok, nie musisz, te metodę znam. Nie sądzilem jednak ze ktoś jest takim masochistą by to stosować w mysql.
A już szczególnie zdziwil mnie post fifi, ktory stwierdzil ze nie widzi tu nic ze stronicowania i ze koniecznie musi byc BETWEEN, a przeciez uzyto tu LIMIT.

MOze mayl OT sie tu zrobil, ale nie chcialem by nie daj boze autor tematu posluchal fifi i zaczal sie z jakims BETWEEN bawic smile.gif
Spawnm
popieram, osobiście gdy robiłem stronicowanie z between nie wiedziałem że istnieje LIMIT , potem się dowiedziałem i uznałem że łatwiej smile.gif
Daj jakiś link lub opisz jak działa pager w oraclu bo nie znam ...
maxil
sporo tego napisaliście ale jak na razie nie znalazłem odpowiedzi na moje pytanie ;]

jeszcze raz:

w którym miejscu i jaką pętle zastosować aby wyświetlać treści odpowiednie dla danej strony?
Spawnm
po mysql_query daj
  1. <?php
  2. while($row=mysql_fetch_assoc($sql_num)){
  3. echo $row['cos'];
  4. }
  5. ?>
maxil
ups coś nie wyszło wywaliło wszystkie rekodry nie podzieliło ich na strony
leovandamon
Gotowiec.

  1. <?php
  2. // Pobieramy numer strony
  3. if($_GET['page']) $start = intval($_GET['page']);
  4. else $start = 0;
  5.  
  6. // Zabezpieczamy się przez szkodnikami
  7. if($start < 0) $start = 0;
  8.  
  9. // Ile wyników na stronę?
  10. $ppage = 10;
  11.  
  12. // Przygotowyjemy zapytanie
  13. $s = $start * $ppage;
  14. $query='SELECT * FROM tabela ORDER BY id DESC LIMIT '.$s.','.$ppage;
  15.  
  16. // A dalej już sobie dopisz...
  17. ?>


I wytłumaczę. Po LIMIT musisz dać, od którego rekordu chcesz zacząć (nie jest to id), a po przecinku ile rekordów wyciągnąć.

LIMIT służy także do ograniczenia ilości wyników, np. LIMIT 10 - będziesz miał 10 pierwszych rekordów.
LIMIT 5,10 - będziesz miał 10 wyników zaczynając od piątego.

Pisałem z palca.

Pozdrawiam,
Leo van Damon.
Fifi209
Cytat(nospor @ 6.08.2009, 13:54:20 ) *
jesli masz na mysli takie uzycie BETWEEN jak to sie robi stronicowanie w ORACLEu to ok, nie musisz, te metodę znam. Nie sądzilem jednak ze ktoś jest takim masochistą by to stosować w mysql.
A już szczególnie zdziwil mnie post fifi, ktory stwierdzil ze nie widzi tu nic ze stronicowania i ze koniecznie musi byc BETWEEN, a przeciez uzyto tu LIMIT.

MOze mayl OT sie tu zrobil, ale nie chcialem by nie daj boze autor tematu posluchal fifi i zaczal sie z jakims BETWEEN bawic smile.gif


"użyto tu LIMIT"

Przepraszam Cię bardzo drogi nospor'ze widzisz w tym zapytaniu limit?
  1. SELECT * FROM tabela ORDER BY id DESC


Jeżeli widzisz, to proszę wskaż mi go kolorem najlepiej czerwonym i pogrubioną czcionką.

@down
Zwracam w takim razie honor. winksmiley.jpg Moje niedopatrzenie, człowiek nieprzywykły do mieszania html z php. snitch.gif
wookieb
$query_page=$query." limit $start,$limit_linkow";
maxil
dzięki za wszelaką pomoc
już zrobiłem i działa jak należy ;]
nospor
Cytat
Daj jakiś link lub opisz jak działa pager w oraclu bo nie znam ...

Mniej wiecej coś takiego:
  1. SELECT * FROM ( SELECT ROWNUM AS ID, field1, field2, field3 FROM TABLE
  2. )
  3. WHERE id BETWEEN 20 AND 40;

Dawno nie uzywalem
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.