Separate Page From Row Record
Posted on : 03-07-2009 | By : saturngod | In : Article, C#, PHP
Tags: SQL
0
ကၽြန္ေတာ္တို႕ေတြ SQL က ရလာတဲ့ record ေတြက အရမ္းမ်ားလာတဲ့ အခါမွာေတာ့ ကၽြန္ေတာ္တို႕ေတြအေနနဲ႕ page ေတြ ခြဲထုတ္ လိုက္မွ အဆင္ေျပတယ္။ page ခြဲထုတ္တယ္ဆိုတာ Web Page မွာပဲ ျဖစ္ျဖစ္ Application မွာပဲျဖစ္ျဖစ္ record ေပါင္းေျမာက္ျမားစြာကို ထိန္းခ်ဳပ္ဖို႕အတြက္ လိုအပ္ပါတယ္။ page ခြဲထုတ္တဲ့ နည္းေလး စဥ္းစားၾကည့္ရင္...
အရင္ဆံုး record လိုင္းေပါင္း ရဖို႕ လိုအပ္ပါတယ္။ ဒါေၾကာင့္
select count(*) from table;
နဲ႕ ေခၚလိုက္ရင္ေတာ့ record အေရအတြက္ရႏိုင္တာေပါ့။ ကိုယ့္ဘာသာကိုယ္ filter ထည့္ရင္လည္း ထည့္ေပါ့။ count(*) ေလးနဲ႕ ဆုိရင္ Row ေပါင္း ဘယ္ေလာက္ရိွလဲ သိရျပီ။ row အေရအတြက္ စုစုေပါင္းဟာ record_count ထဲဝင္သြားျပီလို႕ သတ္မွတ္လုိက္မယ္။ ျပီးရင္ ကၽြန္ေတာ္တုိ႕ page ေတြ ခြဲထုတ္ဖုိ႕အတြက္
၁။ page တစ္ခုမွာ ဘယ္ေလာက္ပါမလဲ။ PHP နဲ႕ ေရးရင္ေတာ့ Page တစ္ခုမွာ 50 ေလာက္ပဲ ေကာင္းတယ္။ ဒီထက္ပိုသြားရင္ ေလးသြားတတ္တယ္။ C# နဲ႕ Application ပိုင္းမွာဆိုရင္ေတာ့ 300 ေလာက္ဆို ေတာ္သင့္ျပီ။ ဒါေၾကာင့္
int show=300;
လုိ႕ ကၽြန္ေတာ္ မွတ္ထားလိုက္မယ္။
ျပီးရင္ page ဘယ္ႏွစ္ခုလဲဆိုတာ သိရေအာင္
double page = record_count / show;
အဲဒါဆိုရင္ ေတာ့ အၾကမ္းသိရျပီေပါ့။ ဒါေပမယ့္ တစ္ခ်က္ စဥ္းစားၾကည့္ရေအာင္။
620 ဆိုရင္ တစ္မ်က္ႏွာ 300 ျပမယ္ဆိုေတာ့ ၃ မ်က္ႏွာ ရိွမယ္။ ဒီေတာ့ 620/300 ဆုိရင္ အေျဖက 2.06 ေလာက္ျဖစ္မယ္။ ဒါဆုိရင္ေတာ့ ၂ မ်က္ႏွာ သုိ႕မဟုတ္ ၂ မ်က္ႏွာ ထက္ဆိုတာ သိေနျပီ။ ဒါေၾကာင့္ floor ယူလိုက္မယ္။ floor ဆိုတာက 2.6 ဆိုလည္း 2 ပဲ။ 2.01 ဆိုလည္း 2 ပဲျဖစ္ေအာင္ လုပ္လုိက္တာပါ။ အိုေက... ထပ္တုိးဖုိ႕ page ရိွမရိွကို ကၽြန္ေတာ္တုိ႕ စဥ္းစားမယ္ဆိုရင္ ဘာနဲ႕ ရႏိုင္လဲဆိုေတာ့ အၾကြင္းနဲ႕ ရႏိုင္တယ္ေလ။ ဒီေတာ့ 620 ကို 300 နဲ႕ စားလို႕ရမယ့္ အၾကြင္းဟာ 0 မဟုတ္ဘူးဆုိရင္ တိုးရမွာ ေသခ်ာျပီေပါ့။
ဒီေတာ့
page = Math.Floor(page);
int mod = record_count % 5;
if (mod != 0) page++;
အခုဆိုရင္ page စုစုေပါင္း ရပါျပီဗ်ာ။ C# နဲ႕ အစအဆံုးဆုိရင္
int record_count = 630; int show = 300; double page = record_count / show; page = Math.Floor(page); int mod = record_count % show; if (mod != 0) page++;
PHP နဲ႕ဆိုရင္ေတာ့
$record_count=630; $show=300; $page=$record_count/$show; $page=floor($page); $mod=$record_count % $show; if($mod!=0) $page+=1;
page အလုိက္ျပန္ေခၚတာကေတာ့ သင္ သံုးရမယ့္ SQL ေပၚမွာ မူတည္တယ္။ Record ေတြျပန္ထုတ္တာကို Limit လုပ္တာေတြက တစ္ခုနဲ႕ တစ္ခုမတူညီၾကဘူး။ MySQL က တစ္မ်ဳိး ၊ Access က တစ္မ်ဳိး ျဖစ္သလို MS SQL က တစ္မ်ဳိးျဖစ္ေတာ့ သင္သံုးမယ့္ SQL ေပၚမွာ မူတည္ျပီး စဥ္းစားရမွာပဲေပါ့။ Limiting Result ကိုေတာ့ http://en.wikipedia.org/wiki/Select_(SQL)#Limiting_result_rows မွာ ဖတ္ရႈႏိုင္ပါတယ္။



