2012-08-14 183 views
1

我正在做一個查詢,從SQL表中拉出大量的數據。我想實現無限滾動功能,以便每次只能拖動25條左右的記錄。從最後一個記錄檢索後從postgresql拉記錄

雖然我有一些麻煩。

當用戶向下滾動時,會調用此查詢。 jquery發佈到php上的最後一個記錄的最後一個id放在頁面上;

//ie, this js pulls the id 
var last_order_number = $('.order_number_divs:last').attr('id'); 

//from this div 
<div id="2476" class="order_number_divs"> 1121310 </div> 

我想,如果我選擇了兩個結果其中ID比頁面上的上號時,我肯定會得到以下兩個結果。但是,我每次都得到相同的兩個結果。

SELECT 
    id, 
    order_number 
    FROM sales_orders 
    WHERE id > '$last_id' 
    ORDER BY id ASC 
    LIMIT 2 

這是通過模板運行數據來填充div的jquery。由於vkTemplate不支持追加,因此一旦完成了將內容填充到div的操作,我刪除了剛剛填充的div的ID,並將ID賦予其下面的div,因此下一次有滾動時,內容將進入該分區。

$(window).scroll(function() { 

    if ($(window).scrollTop() >= $(document).height() - $(window).height() - 10) { 



     var last_order_number = $('.order_number_divs:last').attr('id'); 

     console.log(last_order_number); 
     $.ajax({ 
      type: "POST", 
      async: false, 
      url: "queries/privileged_search_more_content.php", 
      data: "user=" + "<?=$_COOKIE['username']?>" + "&last_order_number=" + last_order_number, 
      dataType: "json", 
      success: function (data) { 
       console.log(data); 

       $('#INT-order_information_container').vkTemplate("templates/get_orders_initial_template.tmpl?" + <?=time()?> , data, function() { 

       $('#INT-order_information_container').removeAttr('id'); 
       $('#template_div_next').removeAttr('id') 
             .attr('id', 'INT-order_information_container'); 

       }); 
       console.log($.active); 
      } 
     }); 

    } 
    }); 

你有什麼想法爲什麼相同的兩個記錄被反覆拉扯?

非常感謝!

此外,我發現這個滾動功能似乎被調用上下來。但這是一個不同的問題。只是說,所以你知道我至少知道那麼多。

+1

查詢看起來是合理的。如果從psql運行它,會發生什麼情況,每次都要用最後一個ID代替?如果它在psql中有效,你可以合理地斷定問題是你的代碼;你可能實際上並沒有使用新的行,所以你不斷重新提交舊的行。查詢日誌也可能有用;在'postgresql.conf'中啓用'log_statement ='all''並重新啓動Pg。 – 2012-08-15 01:15:32

+0

@CraigRinger我認爲這聽起來很合乎邏輯。不幸的是,postgre conf的修改將不得不等到服務器人員回到辦公室。感謝您的建議! – 1252748 2012-08-15 01:52:01

+0

如果你不能修改'postgresql.conf',你可以使用'SET log_statement ='all';'在你的數據庫連接代碼中設置它的每個會話。只有來自該連接的語句纔會被記錄到PostgreSQL服務器日誌中。另外,我很驚訝你沒有在本地PostgreSQL安裝上進行開發/測試,所以你可以設置快速但不安全的選項,所以你不必擔心「服務器人」。 – 2012-08-15 01:55:08

回答