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