WebDeveloper
 g³ówna | forum manual | skrypty |  artyku³y |  projekty | porady |  zasoby |  linki 
dzia³y
  •  manual PHP
  •  skrypty PHP
  •  artyku³y
  •  projekty
  •  porady
  •  zasoby
  •  linki
  •  
    forum
  •  php
  •  apache
  •  mysql
  •  postgresql
  •  faq php
  •  pomocnik php
  •  
    archiwum
  • Nowy dzia³: porady !
  • Kurs PHP
  • Zapisz siê na nasz newsletter !
  • Serwery obs³uguj±ce PHP !
  • Nadchodz± zmiany!
  • Zostañ wspó³twórc± PHP.zone.pl !
  • Jest PHP 4.0.1 !
  • MySql na licencji GPL !
  • Konfiguracja serwera!
  • Forum dyskusyjne otwarte !
  • redakcja

    Je¶li masz ciekawe informacje odno¶nie PHP, skrypty, porady, linki itp. lub chcia³by¶ wspó³tworzyæ serwis PHP.zone.pl daj nam znaæ na email !



    dodaj poradê !


    Powered by:
    PHP
    Apache
    MySql
    Linux

    users online: 8

    Porcjowanie wyników zapytania
    ( 09. Listopad 2000)
    ( 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 :))





    komentarze | strona g³ówna






    kontakt

    autor:

    Hubert Mierzwiak

    wspó³praca:

    Piotr Karolak

    Chcesz prowadziæ swój dzia³ tematyczny typu XML, SQL, admin, JavaScript, itp?
    Napisz do nas !
     
    skrypty
  • designer.zip
  • vipAuth.tgz
  • phpCenzura.tgz
  • vip_php.tgz
  • pomocnik_light
  • ankieta
    Co s±dzisz o stworzeniu FAQ PHP?
    super!
    po co?

    poprzednie

    newsletter

    wpisz swój email i wci¶nij Enter

    linuxnews.pl
  • KRRiTV stra¿nikiem!?
  • Dzisiejsze zebranie...
  • Felieton w warunkach ekstremalnych
  • Nexidion Designer
  • Solaris OpenSource
  • KDE 2.0.1
  • Jest ju¿ nowy Debian...
  • Tydzieñ min±³...




  • Manual | Skrypty | Artyku³y | Projekty
    Porady | Zasoby | Linki
    G³ówna | Forum

    Copyright 2000 Hubert Mierzwiak