نمایش نتایج 1 تا 3 از 3

نام تاپیک: صفحه بندی کردن مقادیر دیتابیس

  1. #1

    صفحه بندی کردن مقادیر دیتابیس

    سلام به همه دوستان ، من مقدار 20 row داخل دیتابیس دارم ، یعنی به عنوان مثال 20 تا کاربر دارم داخل دیتابیس ؛ حالا من میخوام 5 تا از این افراد رو در صفحه اول ؛ 5 تا صفحه دوم . 5 تا سوم . چهارم نمایش بدم .

    قصد من دقیقا این هست که اگر کوئری خاصی هست که باهاش بشه این کار و انجام داد انجام بدم ...
    حالا میخوام اگر مقدار کاربران ما از 20 تا هم بیشتر بود مثلا 500 تا هم بود این مقدار با صفحات بیشتری هم بشه انجام داد و قصد من این هست که بهینه باشه چون میخوام نتایج کوئری رو در نرم افزاری نمایش بدم .

    باتشکر از همه دوستان .

  2. #2

    نقل قول: صفحه بندی کردن مقادیر دیتابیس

    سلام

    ساختار کوئری اسکیول شما بصورت زیر باید باشد. توصیه می کنم حتما از order متناسب با نیاز خودتان استفاده کنید

    #page 1
    select * from table_name order by id_table desc limit 0,5

    #page 2
    select * from table_name order by id_table desc limit 5,5

    #page 3
    select * from table_name order by id_table desc limit 10,5

    #page 4
    select * from table_name order by id_table desc limit 15,5


    دستور لیمیت دو مقدار میگیرد که اولی offset (تعداد سطرهایی که نباید در نظر گرفته شود) و دومی تعداد سطرهای مورد نظر است. بنابراین یک رابطه ساده بین شماره صفحه و آفست وجود دارد (page-1)*rowsPerPage


    $rowsPerPage = 5;
    $currentPage= (int)$_REQUEST['page'];
    if($currentPage<1) $currentPage= 1;
    $offset = ($currentPage-1)*$rowsPerPage;

    $query = 'select * from table_name order by id_table desc limit "'. $offset .'","'. $rowsPerPage .'"';


    مورد بعدی این است که چگونه در url شماره صفحه را بگنجانیم. ساده ترین روش آن استفاده از query string می باشد مثلا mydomain.com/users.php?page=4.
    می توانید از فرم های کاربر پسند دیگری مانند mydomain.com/users/page/4 نیز استفاده کنید.

    در نهایت به بخشی نیاز داریم تا شماره صفحات را به کاربر نمایش دهد. و لینک آنها را با توجه به توضیحات مرحله قبل بسازد. در اینجا ما به دو مقدار نیاز داریم یکی تعداد کل کاربران (در اینجا 20 تا) و دیگری تعداد سطرهای موردنظر در هر صفحه (در اینجا 5 تا) تا از آنها تعداد صفحات را بدست آوریم تعداد صفحات برابر است با ceil($countUsers/$rowsPerPage)

    بقیه مراحل به راحتی در یک حلقه قابل انجام است:

    /*
    * pagening results
    */
    $perPage = 5;
    $pages = 0;
    //بسته به کلاس مورد استفاده، دستور زیر را اصلاح کنید
    $result = $db->fetch('select count(*) from users');

    if($result)
    $pages = ceil($result['count(*)'] / $perPage);


    $currentPage= (int)$_REQUEST['page'];
    //شماره صفحه نمیتواند کوچکتر از 1 و یا بزرگتر از کل صفحات باشد.
    if($currentPage<1) $currentPage= 1;
    if($currentPage>$pages) $currentPage= $pages;

    //برای یک صفحه نیازی به نمایش شماره صفحات نیست
    if($pages>1){
    echo '<ul class="pagening">';
    for($i = 1; $i <= $pages; $i++){
    echo '<li class="'.($currentPage==$i?'active':'').'"><a href="/users.php?page='.$i.'">'.$i.'</a></li>';
    }
    echo '</ul>';
    }


    با افزایش تعداد کاربران تعداد صفحات نیز افزایش می یابد و منطقی نیست که مثلا لینک 100 تا صفحه را داخل سایت قرار دهیم برای این کار کافیست تا الگویی برای اینکه کدام صفحات نمایش یابند و کدام صفحات نمایش نیابند در نظر بگیریم. به اینصورت که 4 صفحه قبل و بعد از صفحه کنونی کاربر را نمایش دهیم + شماره صفحه اول و آخر
    فرض کنیم کاربر در صفحه اول قرار دارد: 1-2-3-4-5-...-20
    فرض کنیم کاربر در صفحه 8 قرار دارد: 1-...-4-5-6-7-8-9-10-11-12-...-20
    و اگر کاربر در صفحه 20 قرار داشت: 1-...-16-17-18-19-20
    بسته به نیاز خود می توانید این الگو را تغییر دهید.

    حال کافیست یک شرط ساده در ابتدای حلقه قرار دهیم تا موارد غیر ضروری را در نظر نگیرد. یا اینکه صفحات را به سه بخش تقسیم کنیم و محدوده هر کدام را تعیین کنیم و از سه حلقه برای نمایش آنها استفاده کنیم مثلا برای مورد دوم این بازه ها بصورت 1تا1 و 4 تا 12 و 20 تا 20 تقسیم می شود. روش دوم بهتره چون اگر تعداد صفحات خیلی زیاد باشه نیازی نیست همه آنها را در لوپ مرور کنید. دلیل استفاده از سه حلقه این است که ممکن است بخواهید شماره صفحات دارای این الگو باشند مثلا 1-2-3-4-5-6-7-8-9-10-11-12-...-18-19-20 سه حلقه 1تا3 و 4تا12 و 18تا20 خواهیم داشت. در ضمن به حالت هایی که ممکن است محدوده این حلقه ها همپوشانی داشته باشند و مواردی که نیاز به ... نمی باشد دقت کنید.

    در نهایت تمامی این موارد را می توانید در یک کلاس پیاده کنید که ورودی های آن صفحه جاری / تعداد کل سطرها / تعداد سطرهای هر صفحه / و الگوی url می باشد و به عنوان خروجی می تواند صفحه بندی را بصورت خودکار انجام دهد.
    آخرین ویرایش به وسیله ali_sed : پنج شنبه 03 مرداد 1398 در 12:21 عصر

  3. #3

    نقل قول: صفحه بندی کردن مقادیر دیتابیس

    خیلی ممنونم از پاسختون ، مشکل کاملا حل شد

تاپیک های مشابه

  1. پاسخ: 2
    آخرین پست: پنج شنبه 11 تیر 1394, 16:11 عصر
  2. تبدیل دیتابیس فاكس پرو (FoxPro) به دیتابیس (SQL SERVER 2008) با پشتیبانی از زبان فارسی
    نوشته شده توسط majid_darab در بخش مسائل مرتبط با نصب و راه اندازی
    پاسخ: 9
    آخرین پست: سه شنبه 15 فروردین 1391, 16:14 عصر
  3. پاسخ: 1
    آخرین پست: چهارشنبه 02 شهریور 1390, 14:36 عصر
  4. پاسخ: 0
    آخرین پست: چهارشنبه 20 بهمن 1389, 16:56 عصر
  5. پاسخ: 2
    آخرین پست: چهارشنبه 17 آذر 1389, 20:08 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •