( peewee )
W zwi±zku z czêsto pojawiaj±cymi siê na forum pytaniami o porcjowanie wyników
zapytania postanowi³em napisaæ krótki tek¶cik, który powinien wszystko wyja¶niæ
i rozwiaæ wszelkie w±tpliwo¶ci.
Mamy tabelkê, powiedzmy w³asn± kolekcje mp3. Teraz chcemy na naszej stronie
domowej udostêpniæ j± odwiedzaj±cym. Jest tylko jeden problem. Mamy kilkaset
utworów i tak wielka strona strasznie d³ugo siê ³aduje. Postanawiamy wiêc
podzieliæ kolekcje na podstrony. Cofnijmy siê jednak trochê i zróbmy to
normalnie, czyli wszystko na jednej stronie. Zrobiliby¶my to mniej wiêcej tak:
<?
$result=mysql_db_query("naszabaza","SELECT tytul, autor, plyta, rok FROM
empecze");
while ($row=mysql_fetch_array($result)) {
echo $row[tytul].$row[autor].$row[plyta].$row[rok];
}
?>
Dodaj±c oczywi¶cie jakie¶ formatowanie tekstu, mo¿e jakie¶ ³adne tabelki itp.
Spróbujmy teraz zrobiæ to samo, ale bêdziemy wy¶wietlaæ tylko czê¶æ wyników.
Zmodyfikujemy tylko zapytanie:
SELECT tytul, autor, plyta, rok FROM empecze LIMIT 0,10;
Co oznacza ten magiczny LIMIT? LIMIT 0,10 powoduje, ¿e zapytanie zwróci tylko
dziesiêæ kolejnych wierszy zaczynaj±c od zerowego (czyli pierwszego).
Czy komu¶ ju¿ co¶ ¶wita? :) Taaaaaaak ¿eby porcjowaæ te wyniki, wystarczy
odpowiednio modyfikowaæ warto¶ci parametrów LIMIT'a :)
Genialne w swej prostocie.
Przejd¼my do konkretów. Czego potrzebujemy? Napewno jakiej¶ zmiennej, która
okre¶la³aby któr± porcjê (stronê) ogl±damy. Nazwijmy j± $page. Okre¶lmy sobie
te¿ zmienn± z ilo¶ci± wyników na jednej podstronie. J± nazwiemy $ile (wiem, ¿e
g³upio).
Musimy teraz obliczyæ na którym wierszu zaczyna siê np strona pi±ta, aby¶my
mogli przekazaæ do LIMIT'a od którego wiersza ma zacz±æ. No to jest dosyæ
proste, mno¿ymy numer strony przez ilo¶æ wyników, które maj± byæ wy¶wietlane na
jednej podstronie i jush :)
Nasze zapytanie wygl±da wiêc teraz tak:
SELECT tytul, autor, plyta, rok FROM empecze LIMIT ($page*$ile),$ile;
a w php zrobiliby¶my to tak:
$result=mysql_db_query("naszabaza","SELECT tytul, autor, plyta, rok FROM empecze
LIMIT ".($page*$ile).",$ile");
No ju¿ prawie jeste¶my u celu :) Teraz pozosta³o nam tylko dorobiæ nawigacjê po
naszym archiwum muzycznym.
Zrobimy przyciski nastêpny/poprzedni i listê podstron a'la wyszukiwarki :)
Na dobry pocz±tek musimy wiedzieæ ile w ogóle bêdzie podstron. W tym celu
sprawdzamy ile mamy utworów w naszej bazie:
list($wszystkich)=mysql_fetch_row(mysql_db_query("naszabaza","SELECT count(*)
FROM empecze"));
Oczywi¶cie w ten sposób nie powinno siê programowaæ :)
Teraz wyliczamy ile bêdzie podstron, dzielimy ilo¶æ utworów przez rozmiar porcji
i zaokr±glamy w góre:
$podstron=ceil($wszystkich/$ile);
Nooo ¶licznie :)
Przycisk "poprzednia strona":
if ($page>0) echo "<a href=skrypt.php?page=".($page-1).">Poprzednia</a>"; else
echo "Poprzednia";
Czyli w skrócie... je¶li to nie jest pierwsza strona (liczymy od zera) to zrób
link do poprzedniej strony ($page-1) w przeciwnym wypadku napisz tylko
Poprzednia (nie link).
Teraz robimy listê stron, lub jak kto woli porcji:
for ($i=1; $i<=$podstron; $i++) {
if ($i==$page-1) echo "$i"; else echo "<a href=skrypt.php?page=$i> $i
</a>";
}
Pamiêtajmy o tym, ¿e wewnêtrznie liczymy od zera!, ale na ekranie pokazujemy od
jedynki.
I znowu w skrócie... robimy pêtle od 1 do ilo¶ci podstron, któr± to wyliczyli¶my
troszkê wcze¶niej. Sprawdzamy czy przypadkiem aktualnie nie jeste¶my na tej
podstronie, je¶li tak to piszemy j± normalnie, a je¶li nie to robimy link do
danej podstrony. Chyba trochê zamota³em.....
Teraz czas na przycisk "nastêpna strona". Robimy go w zasadzie prawie tak samo
jak przycisk "poprzednia strona":
if ($page<$podstron) echo "<a href=skrypt.php?page=".($page+1).">Nastêpna</a>";
else echo "Nastêpna";
No to ju¿ koniec naszej opowie¶ci... wszystko zrobione. Warto by³oby tylko
oprawiæ to jako¶ ³adnie w html. Nawigacje w jaka¶ ramkê zamkn±æ itp... Ale to
mo¿ecie potraktowaæ jako zadanie domowe :))
|