Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Porcjowanie wyników - problem
jureczek
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 20.06.2002

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


Witam!

Mam problem z porcjowaniem wyników zapytania na "zasadzie Google" - czyli
przez 1,2,3 itp. Nigdzie nie znalazłem żadnej porady na ten temat,
szczególnie jeśli chodzi o porcjowanie z użyciem MySQL. W moim skrypcie
zlepilem pare znalezionych przykladów i... wyszlo, ale jednak nie do konca.
Oto fragmenty mojej rzezby...

<?php
if(($s=="") && ($e=="")){
$s="0";
$e="10";
}
// to oczywiscie argumenty do LIMIT w MySQL...

// dalej zabawa z zapytaniami w MySQL, wlacznie z wyliczeniem liczby
rekordow = $ile

// no i wlasciwa czesc skryptu...:

if($ile > $s){
$s=$s+10;
$ile_row=$ile/10;
$ile_row=floor($ile_row);
$azdo=$ile_row;
for ($aa=0;$aa<=$azdo;$aa++){
$razy_row = $aa*10;
$razy_row1 = $aa;
$aa1=$aa+1;
echo "<a href="costam.php">[$aa1]</a>"; }
}
?>

Gdzie problem? Wszystko jest OK, w momencie gdy przy wyliczaniu ilosci
"podzielnikow" wychodzi okragla liczba. Zgodnie ze skryptem, nastepuje
inkrementacja tej wartosci i stworzenie kolejnego podzielnika z linkiem,
gdzie de facto nic nie ma! Probowalem uciec od tego na wiele sposobow -
wszytkie okazaly sie zawodne - tzn. problem moze i znikal, ale wzamian
pojawial sie nastepny (np. skrypt nie widzial ostatniej czesci wynikow
zapytania). Co zrobic?
I druga sprawa: w jaki sposob wyswietlac tylko okreslona liczbe
"podzielnikow" - tzn. np po 5: <1 | 2 | 3 | 4 | 5> i w wypadku wyzszych <4 |
5 | 6 | 7 | 8>

Z góry dzięki za KAŻDĄ pomoc.

Pozdrawiam
Jurek
Go to the top of the page
+Quote Post
Sir Blade
post
Post #2





Grupa: Zarejestrowani
Postów: 211
Pomógł: 0
Dołączył: 7.06.2002

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


taki sam przyklad jest na tej podstronie:

http://www.bastek.tvs.pl/porady_show.php3?...?show=porada_31
Go to the top of the page
+Quote Post
jureczek
post
Post #3





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 20.06.2002

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


Jak ten, jak nie ten? Tamten nie uwzglednie porcjowania "google" tylko najbardziej prymitywny podzial sad.gif Autor obiecal sie tym zajac ale na obietnicach sie skonczylo a moje proby jak widac zawiodly... Tak wiec jeszcze raz - pomocy!
Go to the top of the page
+Quote Post
zyxwvu
post
Post #4





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: --
Skąd: 50° 30' N, 22° 7' E

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


Oto masz gotowy [napisany przeze mnie] skrypt, który służy do tego celu. Zapewniam, że ZAWSZE działa, przy czym, jak linków jest za dużo, wyświetla tylko końcowy, początkowy, oraz linki wokół tego, który jest aktualnie wyświetlany.

Kod
function x($link, $num, $page){

  if(strpos($link, "?") == 0){

    return " <a href="".$link."?from=".$num."">".$page."</a> ";

  }else{

    return " <a href="".$link."&from=".$num."">".$page."</a> ";

  }

}



function GetPagesCount($options, $per_page){

  $mod = $options % $per_page;

  $a   = $options - $mod;



  $b   = $a / $per_page;



  if($mod > 0){

    $c = 1;

  }else{

    $c = 0;

  }



  return $b + $c;

}



function StartLastPage($options, $per_page){

  $mod = $options % $per_page;

  $a   = $options - $mod;



  $b   = $a / $per_page;



  if($mod > 0){

    return $a + 1;

  }else{

    return $a - ($per_page-1);

  }

}



function MakePages($options, $per_page, $active, $link){



  $mod = $options % $per_page;

  $a   = $options - $mod;

  

  $b   = $a / $per_page;

  



  if($mod > 0){

    $c = 1;

  }else{

    $c = 0;

  }

  

  $rt[0]  = $b + $c;

  

  if($b+$c > 5){

    $b = $b-1;

    $links = x($link, 1, 1);

    if($active > 3){

      $links .= "... ";

      $links .= x($link, $per_page*($active-1), $active-1);

      $links .= x($link, $per_page*$active, $active);

      if($active < $b + $c){

        $links .= x($link, $per_page*(1+$active), $active+1);

      }

    }else{

      $links .= x($link, $per_page, 2);

      $links .= x($link, $per_page*2, 3);

      $links .= x($link, $per_page*3, 4);

    }

    if($active < $b + $c-1){

      $links .= "... ";

      $links .= x($link, $per_page * ($b + $c), $b + $c);

    }

  }else{

    for($i = 1; $i <= $b+$c; $i++){

      $link_num = $per_page*($i-1);

      if($i == 1){

        $link_num++;

      }else{

        $link_num++;

      }

      $links .= x($link, $link_num, $i);

    }

  }

  

  $rt[1] = $links;

  return $rt;

}


Funkcja X jest wewnętrzną funkcją, lecz umieściłem ją na zewnątrz, bo w przeciwnym wypadku, gdy 2 razy wywołałeś tę funkcję, to wywalało błąd.

Pozostałe funkcje:
GetPagesCount - wylicza, ile jest stron wyników. Jako pierwszy parametr podajesz ilość wyników, a jako drugi ilość wyników na stronę.
StartLastPage - Podaje numer pierwszego wyniku na ostatniej stronie. Parametry te same.
MakePages - Przygotowuje listę stron wyników. Jako parametry pobiera kolejno: options - Ilość wyników; per_page - ilość wyników na stronę; active - nie pamiętam dokładnie, ale najprawdopodobniej oznacza to aktualna stronę. Jeśli nie, to pierwszy wynik na danej stronie; link - Wygląd linka, do którego ma prowadzić każda strona. Jeśli np podamy "index.php?action=show", to zostanie do niego dołączony parametr from=numer_pozycji_od_ktorego_ma_zaczac_wyswietlac_aktualna_strone.
I jeszcze: jak określić, od którego wyniku do którego ma wyświetlać wyniki (to wstawiamy do skryptu, który ma wyświetlić wyniki):
Kod
    $cnt = count($tablica_wynikow);

    $buf = $cnt;

    

    if(!isset($from)){

      $from = 1;

    }

    

    if($cnt > $tpp){

      $limit = $cnt - $from;

      if($limit > $tpp){

        $limit = $tpp;

      }elseif($limit < $tpp){

         $limit++;

      }

    }else{

      $limit = $cnt;

    }

  /* A potem wywołanie pętli FOR wyświetlającej wyniki, jeśli pierwszy element tabeli wyników ma indeks 1: */

    if($cnt > 0){

      // Gdy są jakieś wyniki

      for($i = $from; $i <= $from+$limit-1; $i++){

   // Kod wyświetlający wyniki

     }

   }else{

  // Gdy nie ma wyników

   }

  

Mam nadzieję, że to powinno pomóc.


--------------------
PozDrX, ZyxwvU
www.anarda.host.sk
Tamta zhackowana :)
Go to the top of the page
+Quote Post
Palli
post
Post #5





Grupa: Zablokowani
Postów: 34
Pomógł: 0
Dołączył: 7.06.2002
Skąd: Poznań

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


JEzeli nadal problem aktualny to zajrzyj na http://php.pd.pl/index.php?dir=8&engine=16...&artykuly_id=32 oraz http://php.pd.pl/index.php?dir=8&engine=16...&artykuly_id=63

Pozdro
Go to the top of the page
+Quote Post
Seth
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

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


Ja swego czasu napisalem cos takiego:

Kod
function page_index(){

global $HTTP_GET_VARS;

$show = 10; // ile ma pokazywac



$result = mysql_query( "SELECT * FROM jakas_tabela");

$number = mysql_num_rows($result);



$page_num = ceil($number/$show);



$page = (ceil($HTTP_GET_VARS['offset']/$show)+1);  

$index = "<b>".$page."</b>";



for($i = 1; $i <= $page_num; $i++){

  if( $page != $i ){

   $j = ($i- 1) * $show;

   $tmp .= "<a href="?offset=$j">$i</a> ";

  }

}



if( $page_num != 1 ) $index .= " [ $tmp ]";



return $index; // tutaj funkcja zwraca indexy stron

}
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 11:52