تشکرها : 28
( 4 تشکر در 3 ارسال )
لطفاً در مورد پيجينگ Pagination(با استفاده از پايگاه داده) آموزش دهيد. متشكرم
تشکرها : 601
( 1128 تشکر در 412 ارسال )
خوب خیلی سادست
1 - ماتو دستورات اس کیو ال که برای MySQL طراحی شده یه چیزی داریم به نام LIMIT.
LIMIT دوتا ورودی میگیره اولیش نقطه ی شروع بعدی تعداد واکشی.به عنوان مثال :
کد پیاچپی:
select * from tbkName LIMIT 10,50
این دستور یعنی از همه ی خروجی های دستور سلکت از شماره دهمش به اندازه 50 تا دونه جدا کن و تو خروجی نمایش بده
تکنین صفحه بندی هم همیجوری کار می کنه
پس با توجه به امکانات موجود ما ابتدا باید بیاییم و لینک هایی بسازیم که بگه کلا چند صفحه داریم و هر صفحه شمارش چنده. سپس بتونیم با توجه به شماره صفحه مقدار لیمیت رو مشخص کنیم.
من برای تعیین لینکا از این متد استفاده می کنم:
کد پیاچپی:
public function SetLink($tblName,$GET=NULL)
{
$SQL = "select count(*) from ".$tblName." ".$this->WhreSqlStatement ;
//include 'DataAccess/db.php';
$CountResualt = SetReturn($SQL,"select");
$Start = 0;
$End = 0;
if(!isset($_GET['Limit']))
{
if($CountResualt[0][0] > 100)
$End = 100;
else $End = $CountResualt[0][0];
}
else
{
$Limit = $_GET['Limit'];
$PartNo = $Limit / 100;
if(($Limit % 100) > 49)
$PartNo = round($PartNo,0) - 1;
else $PartNo = round($PartNo,0);
$Start = $PartNo * 100;
if(($Start + 100) < $CountResualt[0][0])
$End = $Start + 100;
else $End = $CountResualt[0][0];
if ($Start > 0 ) $Start = $Start - 10;
}
$S = 0;
if($Start > 0)
{
$S = $Start + 10;
}
$j = 1;
if($GET == NULL)
echo "<a href='?Limit=".$Start."'> << </a> ";
else echo "<a href='".$GET."&Limit=".$Start."'> << </a> ";
for($i=$S;$i<$End;$i=$i+10)
{
if($GET == NULL)
echo "<a href='?Limit=".$i."'>".(($i / 10)+1)."</a> ";
else echo "<a href='".$GET."&Limit=".$i."'>".(($i / 10)+1)."</a> ";
}
if($CountResualt[0][0] > 100)
if($GET == NULL)
echo "<a href='?Limit=".$End."'> >> </a> ";
else echo "<a href='".$GET."&Limit=".$i."'> >> </a> ";
}
این متد به طور کل بررسی میکنه ببینه چندتارکرو داریم بعد میاد و اونها رو به صفحات 20 تایی مرتب میکنه.
کد پیاچپی:
public function SetQuery($SQL)
{
$Limit = "Limit ";
if(!isset($_GET['Limit']))
{
$Limit .= "0,10";
}
else
{
$Limit .= $_GET['Limit'].",10";
}
return $SQL." ".$Limit;
}
این متد هم باتوجه به دستور اس کیو الی که از ورودی دریافت کرده و با توجه به اینکه در خواست چه صفحه ای شده میاد و اس کیو ال مورد نظر برای اون رکورد ها رو مینویسه
نهایتش شده این کلاس :
کد پیاچپی:
<?php
class Pagging
{
public $WhreSqlStatement;
public function __construct()
{}
public function SetQuery($SQL)
{
$Limit = "Limit ";
if(!isset($_GET['Limit']))
{
$Limit .= "0,10";
}
else
{
$Limit .= $_GET['Limit'].",10";
}
return $SQL." ".$Limit;
}
public function SetLink($tblName,$GET=NULL)
{
$SQL = "select count(*) from ".$tblName." ".$this->WhreSqlStatement ;
//include 'DataAccess/db.php';
$CountResualt = SetReturn($SQL,"select");
$Start = 0;
$End = 0;
if(!isset($_GET['Limit']))
{
if($CountResualt[0][0] > 100)
$End = 100;
else $End = $CountResualt[0][0];
}
else
{
$Limit = $_GET['Limit'];
$PartNo = $Limit / 100;
if(($Limit % 100) > 49)
$PartNo = round($PartNo,0) - 1;
else $PartNo = round($PartNo,0);
$Start = $PartNo * 100;
if(($Start + 100) < $CountResualt[0][0])
$End = $Start + 100;
else $End = $CountResualt[0][0];
if ($Start > 0 ) $Start = $Start - 10;
}
$S = 0;
if($Start > 0)
{
$S = $Start + 10;
}
$j = 1;
if($GET == NULL)
echo "<a href='?Limit=".$Start."'> << </a> ";
else echo "<a href='".$GET."&Limit=".$Start."'> << </a> ";
for($i=$S;$i<$End;$i=$i+10)
{
if($GET == NULL)
echo "<a href='?Limit=".$i."'>".(($i / 10)+1)."</a> ";
else echo "<a href='".$GET."&Limit=".$i."'>".(($i / 10)+1)."</a> ";
}
if($CountResualt[0][0] > 100)
if($GET == NULL)
echo "<a href='?Limit=".$End."'> >> </a> ";
else echo "<a href='".$GET."&Limit=".$i."'> >> </a> ";
}
}
/*
$Pagging = new Pagging();
$Pagging->SetLink("tblAuctionBid ");
*/
?>
علم تاج افتخار دنیا و یادگار پس از مرگ است