2

好的,这是我的分页代码:

    $SQL = "SELECT
            cpc.product_id,
            cp.product_internal_ref,
            cp.product_name,
            cpa.product_sale_price,
            cpa.is_product_service,
            cpa.product_service_price,
            cpi.image_name,
            cpi.image_ext
            FROM catalog_products_categories cpc 
            JOIN catalog_products cp ON cp.product_id = cpc.product_id
            JOIN catalog_products_attributes cpa ON cpa.product_id = cpc.product_id
            LEFT JOIN catalog_products_images cpi ON cpi.product_id = cpc.product_id
            WHERE cpc.category_id = ".$catID;

    // PAGINATOR SECTION
    if($paginatorVARS['paginatorACTION'] == "next") {
      $SQL .= " AND cpc.product_id > ".$paginatorVARS['paginatorGOID']." ";
      $SQL .= "GROUP BY cpc.product_id ORDER BY cpc.product_id ASC LIMIT ".$paginatorVARS['catalogPaginatorPAGEROWS'];
    }
    elseif($paginatorVARS['paginatorACTION'] == "prev") {
      $SQL .= " AND cpc.product_id < ".$paginatorVARS['paginatorGOID']." ";
      $SQL .= "GROUP BY cpc.product_id ORDER BY cpc.product_id DESC LIMIT ".$paginatorVARS['catalogPaginatorPAGEROWS'];
    }
       // END PAGINATOR SECTION

我使用了这里描述的方法:http : //www.slideshare.net/Eweaver/efficient-pagination-using-mysql 但我无法找到一种方法来按其他列排序,例如按 cpa.product_sale_price。如果我这样做:按 cpc.product_id ASC 订购,cpa.product_sale_price DESC/ASC 它会破坏分页器下一个结果我不知道会发生什么...请帮助!

4

1 回答 1

1

并不是说他们的东西是完美的,但它通常是一个开始的地方,可以考虑您是否真的想重新发明轮子,或者采用他们的概念并将其纳入您的新圆轮中。看一眼

http://dev.sencha.com/deploy/ext-4.0.0/examples/grid/paging.html

并使用 fiddler 检查分页期间发生的 http 获取,以及排序上下文中的更改。当它开始时,它会带回 http 响应标头、带有 jsonp 回调的 json 数据以及 json 数据末尾的顶部节点值,指定记录计数 = 6679 / 50 每页意味着前端计算的总共 134 页。由于插入和删除行,记录计数可能因调用而异(从页面到页面)。

排序列在查询字符串中传递,就像页面影响限制开始一样,进入 sql 的总数。这可以在 fiddler 输出中看到,显示页面或排序列请求的更改(列名和 asc 或 desc):

GET /forum/topics-browse-remote.php?_dc=1369401925806&page=1&start=0&limit=50&sort=lastpost&dir=DESC&callback=Ext.data.JsonP.callback1 HTTP/1.1

GET /forum/topics-browse-remote.php?_dc=1369401977137&page=1&start=0&limit=50&sort=replycount&dir=ASC&callback=Ext.data.JsonP.callback2 HTTP/1.1

GET /forum/topics-browse-remote.php?_dc=1369401978355&page=1&start=0&limit=50&sort=replycount&dir=DESC&callback=Ext.data.JsonP.callback3 HTTP/1.1
于 2013-05-24T13:36:18.893 回答