• 07-11-2012, 14:09:13
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    arkadaşlar merhaba ;
    <?include 'fonksiyon.php';
    $liste=$_GET['sirala'];
    $yaz=mysql_query("SELECT * FROM tag ORDER BY id DESC limit 0,01");
    $oku=mysql_fetch_array($yaz);
    $count = $oku[id];
    $perpage = 200;
    $page = !empty($_GET["page"]) ? intval($_GET["page"]) : 1;
    $s = ($page-1)*$perpage; 
    
     ?>
    <? 
    
    
    $etiket=mysql_query("SELECT tr,id,baslik FROM tag order by id desc limit $s,$perpage"); 
       while ($eti=mysql_fetch_array($etiket))  { ?>
    
    
    							<a href="<?=$eti['tr']?>.htm" 
    	title="<?=$eti['baslik']?>"><font color="#<? echo randchar(8,"hexcolor"); ?>"><b><?=substr(trim(strip_tags($eti['baslik'])),0,22)?></b></font></a>
    
    <? } ?>
    
    <div class="pages">
    <?       
    
    if($count > $perpage) : // 
      $x = 5; // 5 sayfa göster
      $lastP = ceil($count/$perpage);
    
      // sayfa 1'i yazdır
      if($page==1) echo " <span class=\"ThisPage\">1</span>";
      else echo " <a href=\"total-tags-1.html\">1</a>";
    
      // "..." veya direkt 2
      if($page-$x > 2) {
        echo "<span>………</span>";
    
        $i = $page-$x;
    
    	
      } else {
        $i = 2;
    	$h = 0;
    
    
    
      }
      // +/- $x sayfaları yazdır
    
    
      for($i; $i<=$page+$x; $i++) {
        if($i==$page) echo " <span class=\"ThisPage\">[$i]</span>";
        else echo " <a href=\"total-tags-".$i.".html\">$i</a>";
    
    
        if($i==$lastP) break;
    
      }
    
      // "..." veya son sayfa
      if($page+$x < $lastP-1) {
        echo "<span>………</span>";
        echo " <a href=\"total-tags-".$lastP.".html\">$lastP</a>";
      } elseif($page+$x == $lastP-1) {
        echo " <a href=\"total-tags-".$lastP.".html\">$lastP</a>";
      }
    endif;
    
     ?>

    elimde böyle bir kod var.

    bu kod çalışıyor fakat şöyle diyim toplam 100k etiketim varsa sunucuyu yoruyor her sayfa çektiğimde.

    Mesela atıyorum sayfa 1 i listelerken kasmıyor 200 etiket olduğu için sayfa 2,3,4,5 .... sayfa 15 de 15*200 = 3000 etiket çekiyor ama 200 tanesini listeliyor atıyorum son sayfa 500 ise 500*200 = 100,k etiket çekmiş oluyor fakat 200 tanesini listeliyor.

    ben id değeri tanımlamak için uğraştım fakat beceremedim atıyorum ilk sayfada ilk 200 e kadar olan id değerini çeksin. ikinci sayfada id değeri 200 den büyük 400 den küçük olanı çeksin yani yine 200 çeksin 3.sayfada 400 den büyük 600 den küçük olanı çeksin

    gibisinden bir döngü oluşturmaya çalıştım fakat yapamadım amacım serveri rahatlatmak

    bu döngüyü yapabilecek arkadaşlar varsa çok sevinirim teşekkürler.
  • 07-11-2012, 17:37:48
    #2
    Üyeliği durduruldu
    Kayıt satısını SELECT COUNT(id) AS TOPLAM ... şekilnde count komutu ile alıp sonucu değişkene atayıp
    for ile döngüye alıp listeleyebilirsin.
  • 07-11-2012, 18:24:36
    #3
    Bkz: for
  • 10-11-2012, 17:00:39
    #4
    <?php
    $sorgu = mysql_query("SELECT * FROM tag");
    $toplam = mysql_num_rows($sorgu);
    $limit = 200;
    
    if (!is_numeric(@$_GET["p"])){
    	$sayfa = 1;
    	}else{
    	$sayfa = $_GET["p"];
    	}
    	
    $alt = ($sayfa - 1) * $limit;
    
    
    $ws = ceil($toplam/$limit);
    
    $sorgu=mysql_query("SELECT * FROM tag ORDER BY id DESC LIMIT $alt, $limit");
    while($sonuc=mysql_fetch_array($sorgu)){
    
    //içerik buraya yazdırılır...
    
     }
    
    
    ?>
    <div align="center" style="margin-left:auto; margin-right:auto; width:85%;">
    <ol id="pgnav" class="btn-list">
    <?php
    for ($i = 1; $i <= $ws; $i++){
    echo "<li><a class=\"btn\" href=\"?p=".$i."\">".$i."<i class=\"tl\"></i><i class=\"tr\"></i><i class=\"bl\"></i><i class=\"br\"></i></a></li>";
    	}
    if($ws > 2 and ($sayfa < $ws)){
    $sayfa++;
    echo "<li class=\"last next\"><a class=\"btn\" href=\"?p=".$sayfa."\">Sonraki<i class=\"tl\"></i><i class=\"tr\"></i><i class=\"bl\"></i><i class=\"br\"></i></a></li>";
    }
    ?>
    
    </ol>
    </div>
    şöyle bir deneyin.
  • 11-11-2012, 00:26:48
    #5
    senin sorgun zaten direk ofsayt hocam. sen her sorguda tüm satırları mysql den çağırım php de bir değişkene atıyorsun sonra php ile sayıyorsun. her sayfa çalıştığında veritabanındaki tüm etiketler sorgulanıp php de değişkene atanıyor büyük kaynak israfı ve acemilik.

    Arkadaşların yukarıda yazdığı gibi mysql sorgunu tüm satırları getir diye değil select count() ile satır sayısını getir diye sorabilirsin. Eğer etiket adedin yüzbinler milyonlara dayandıysa bunun da yerine şöyle bir şey yapabilirsin. 2 ilyon etiketli bir sitemde gayet iyi performans veriyordu. ama etiket adedin çok fazla ise ve etiketlerin devamlılığı varsa yani aralarında silinmiş satır sayısı az ise bunu kullanabilirsin.

    en yormayacak iş
    SELECT id FROM tag ORDER BY id DESC LIMIT 1
    diye sorgulat.
    En sonuncu id numarasını basitçe hafif bir sorgu ile öğren.
    Bu sonuç 25325 ise şöye bir döngü kur

    for($i=0; $i < 25325; $i+200){
    $link = 'etiket.php?id='$i;
    }

    etiket.php sinde de gelen id den sonraki 200 kayıtı listeletecek bir sorgu koyarsın.


    Bu sayede her sayfa çalıştığında tüm satırlar sorgulanmaz, ya da tüm satır sayısı sayılmaz, son eklenen etiket satırı kolayca çağrılır ve onun id değerine göre sayfalama yapılır.

    Bunun tek dezavantajı eğer aralarda boş ya da silinmiş kayıtlar varsa sayfalama sırasındaki her sayfada eşit sayıda etiket olmaz. Eğer kayıtların aralarında silinmiş etiketler ya da boşluklar varsa o sayfalardaki etiket sayısı az olur ya da 200 den büyük boşluk varsa hiç etiket olmayan bazı sayfalar da çıkabilir.
  • 11-11-2012, 10:59:20
    #6
    En Mantıklı sayfalama ve yuvarlama işlemi şun koddur bence
    $limit=$sayiyaz["anasayfak"];
    $sira=$_GET["habersira"];
    if(($sira=="") or !is_numeric($sira)){
    $sira=1;
    }
    $satirsayisi= mysql_num_rows(mysql_query("SELECT * FROM haberler"));
    $toplamsayfa=ceil($satirsayisi /$limit);
    $baslangic=($sira-1)*$limit;


    $haberoku=mysql_query("SELECT * FROM haberler order by id desc LIMIT $baslangic,$limit");
    while($haberyaz=mysql_fetch_array($haberoku)){

    Arada kodlar olacak

    for($x=1; $x<=$toplamsayfa; $x++){
    echo"<a href=\"index.php?habersira=$x\"><font color=\"#99CC00\">&nbsp;&nbsp;Sayfa $x</font></a> |";
    }
  • 14-05-2014, 20:02:22
    #7
    Bu konuyla ilgili ücretli olarak yardımcı olabilecek bir arkadaş arıyorum, ilgilenen pm atabilir mi ?
  • 14-05-2014, 20:19:42
    #8
    Ücret verilecek bir sorun değil bu.

    Fonksiyonu ister fonksiyon dosyası oluşturup include et istersen dosyanın yukarısına yerleştir.

    function sayfalama( $limit, $sayfano, $satir_sayisi=0, $sayfaadi='index.php', $adresdeger='' )
    {
      $sayfalama = '';
      if($satir_sayisi > $limit)
      {
        $sayfa_sayisi = $satir_sayisi / $limit;
        $sayfa_sayisi = ceil($sayfa_sayisi);
        if($sayfano == $sayfa_sayisi)
        {
          $to = $sayfa_sayisi;
        } elseif($sayfano == $sayfa_sayisi - 1) 
        {
          $to = $sayfano + 1;
        } elseif($sayfano == $sayfa_sayisi - 2)
        {
          $to = $sayfano + 2;
        } else {                         
          $to = $sayfano + 3;
        }                
        if($sayfano < 4)
        {                         
          $from = 1;
        } else {
          $from = $sayfano - 3;
        } 
    	if ( ($sayfano <= $sayfa_sayisi) && $sayfalama ) {
           $sayfalama .= ' <b class="pagenav" title="İlk sayfadasınız.">Önceki sayfa ;</b> ';
        } else {
        $syf = $sayfano-1;
        $sayfalama .= ' <a class="pagenav" href="'.$sayfaadi.'?sayfa='.$syf.$adresdeger.'" title="' . $syf . '. sayfa &raquo;"> &laquo; Önceki </a> ';
        }
        if (4 < $sayfano)
        $sayfalama .= ' <b><a class="pagenav" href="'.$sayfaadi.$adresdeger.'"><b>1</b></a> ...</b> '; 
    
        for($i=$from; $i <= $to; $i++) 
        {
          
    
    
    	  if($i == $sayfano)
          {
            $sayfalama .= ' <b class="pagenav" title="'.$i.'. sayfadasınız.">'.$i.'</b> ';
          } else {
            $sayfalama .= ' [<a class="pagenav" href="'.$sayfaadi.'?sayfa='.$i.$adresdeger.'" title="'.$i.'. sayfa &raquo;">'.$i.'</a>] ';
          }
        }
    
    
    
        if ($to < $sayfa_sayisi)
        {
          $sayfalama .= ' <b>... <a class="pagenav" href="'.$sayfaadi.'?sayfa='.$sayfa_sayisi.$adresdeger.'" title="'.$sayfa_sayisi.'. sayfa &raquo;">'.$sayfa_sayisi.'</a></b> ';
        }
      }
    
    
      if ( ($sayfano >= $sayfa_sayisi) && $sayfalama ) {
           $sayfalama .= ' <b class="pagenav" title="Son sayfadasınız.">Sonraki sayfa &raquo;</b> ';
        } else {
        $syf = $sayfano+1;
        $sayfalama .= '  <a class="pagenav" href="'.$sayfaadi.'?sayfa='.$syf.$adresdeger.'" title="' . $syf . '. sayfa &raquo;"> Sonraki  &raquo; </a>';
        }
    
       if( $satir_sayisi <= $limit )
      {
        $sayfalama = 'Sayfa 1';
      }
      return $sayfalama;
    }


    Sayfalama için gerekli kodlar aşağıda tablo adını ve select ten sonraki ID ve order by dan sonraki ID Değeri değişikse onu düzelt


    $sayfa        = @abs(intval( $_REQUEST['sayfa'] ) ); // sayfa numarası al.
    $limit         = 200; // sayfa başına gösterilecek kayıt sayısı.
    
    $resultT = mysql_query("SELECT ID FROM tabloadi limit ".$baslangic.", ".$limit." order by ID DESC ");   
      
    $count = mysql_num_rows( $resultT );
    
        if( empty( $sayfa ) || $sayfa > ceil( $count / $limit ) ) {
            $sayfa = 1;
            $baslangic = 0;
        } else {
            $baslangic = ( $sayfa - 1 ) * $limit;
        }
    Buda sayfa numaralarını gösteren kod sayfanın en altına koyulacak.

    Toplam <?php echo $count; ?> Soru  <?php  echo sayfalama( $limit, $sayfa, $count, 'index.php', '' ); ?>
    Bu kodları uzun süredir kullanıyorum sorunsuz bir şekilde. Sadece veritabanından belirttiğin değer kadar veri çekildiği için yormuyor.
  • 14-05-2014, 23:55:13
    #9
    MrCaLamity adlı üyeden alıntı: mesajı görüntüle
    arkadaşlar merhaba ;
    <?include 'fonksiyon.php';
    $liste=$_GET['sirala'];
    $yaz=mysql_query("SELECT * FROM tag ORDER BY id DESC limit 0,01");
    $oku=mysql_fetch_array($yaz);
    $count = $oku[id];
    $perpage = 200;
    $page = !empty($_GET["page"]) ? intval($_GET["page"]) : 1;
    $s = ($page-1)*$perpage; 
    
     ?>
    <? 
    
    
    $etiket=mysql_query("SELECT tr,id,baslik FROM tag order by id desc limit $s,$perpage"); 
       while ($eti=mysql_fetch_array($etiket))  { ?>
    
    
    							<a href="<?=$eti['tr']?>.htm" 
    	title="<?=$eti['baslik']?>"><font color="#<? echo randchar(8,"hexcolor"); ?>"><b><?=substr(trim(strip_tags($eti['baslik'])),0,22)?></b></font></a>
    
    <? } ?>
    
    <div class="pages">
    <?       
    
    if($count > $perpage) : // 
      $x = 5; // 5 sayfa göster
      $lastP = ceil($count/$perpage);
    
      // sayfa 1'i yazdır
      if($page==1) echo " <span class=\"ThisPage\">1</span>";
      else echo " <a href=\"total-tags-1.html\">1</a>";
    
      // "..." veya direkt 2
      if($page-$x > 2) {
        echo "<span>………</span>";
    
        $i = $page-$x;
    
    	
      } else {
        $i = 2;
    	$h = 0;
    
    
    
      }
      // +/- $x sayfaları yazdır
    
    
      for($i; $i<=$page+$x; $i++) {
        if($i==$page) echo " <span class=\"ThisPage\">[$i]</span>";
        else echo " <a href=\"total-tags-".$i.".html\">$i</a>";
    
    
        if($i==$lastP) break;
    
      }
    
      // "..." veya son sayfa
      if($page+$x < $lastP-1) {
        echo "<span>………</span>";
        echo " <a href=\"total-tags-".$lastP.".html\">$lastP</a>";
      } elseif($page+$x == $lastP-1) {
        echo " <a href=\"total-tags-".$lastP.".html\">$lastP</a>";
      }
    endif;
    
     ?>

    elimde böyle bir kod var.

    bu kod çalışıyor fakat şöyle diyim toplam 100k etiketim varsa sunucuyu yoruyor her sayfa çektiğimde.

    Mesela atıyorum sayfa 1 i listelerken kasmıyor 200 etiket olduğu için sayfa 2,3,4,5 .... sayfa 15 de 15*200 = 3000 etiket çekiyor ama 200 tanesini listeliyor atıyorum son sayfa 500 ise 500*200 = 100,k etiket çekmiş oluyor fakat 200 tanesini listeliyor.

    ben id değeri tanımlamak için uğraştım fakat beceremedim atıyorum ilk sayfada ilk 200 e kadar olan id değerini çeksin. ikinci sayfada id değeri 200 den büyük 400 den küçük olanı çeksin yani yine 200 çeksin 3.sayfada 400 den büyük 600 den küçük olanı çeksin

    gibisinden bir döngü oluşturmaya çalıştım fakat yapamadım amacım serveri rahatlatmak

    bu döngüyü yapabilecek arkadaşlar varsa çok sevinirim teşekkürler.
    Yukarıdaki kod anlattığınız gibi çalışmıyor. sadece 200 etiket çekiyor başka bir optiizasyon sorununuz var.

    Bu sorunu yaratan google bot gibi botlar ve hitinizin de yüksek olduğu belli. Profesyonel bir arkadaşa sitenizi optimize ettirmenizi tavsiye ederim.