簡體   English   中英

php mysql 和分頁

[英]php mysql and pagination

我在顯示 mysql 數據庫中的數據時遇到問題。 我的客戶需要顯示分頁數據 - 即每頁 15 行,沒有任何滾動條,同時,顯示的數據按類別排序,對於每個新類別,我必須在顯示的表格中添加 2 個新行php 文件,…… 喜歡:

r1-Category1
r2-item name | item data1 ...
db-item1
db-item2
...new item x

r1-Category2
r2-item name | item data1 ...
db-item 1
db-item 2

...

我試圖從數據庫中調用所有數據,為每個類別添加 2 個新行(例如類別名稱和顯示項目的 th),將它們放入一個數組中,然后計算所有行並划分以獲得 15 個頁面結果,並繼續使用 javascript 處理。 這種方法的缺點是,這里有很多數據,完成工作需要將近一分鍾。

最好的解決方案 - 讓數據盡快顯示 IMO 是使用分頁,但我需要定義一個限制.. 還有一個問題 - 如果 15 個結果中的類別可能不同(有時是 3 個, 4個還是一個)? 因此,我試圖找出數據庫的 15 個結果中有多少個類別,然后使用 limit = limit-2x(no of categories) 再次調用數據庫......第一頁工作正常,但下一頁沒有,很明顯...例如:在15行的限制中例如3個類別,所以我需要將限制更改為9...如果我將限制更改為9行,則只有2個類別...非常復雜,但是關鍵是,從我的角度來看,這行不通。

你知道如何解決這個問題嗎?

第一個解決方案對我的客戶來說是不可接受的,從我的角度來看,第二個是不可能的.. 但他的觀點是,在編程中一切皆有可能..

從數據庫中獲取 15 個項目LIMIT (start, count) )。 記住起始索引,並用索引標記您的行。 建立您的表格,但每次遇到標題時,從要顯示的行數中減去 2。 當您達到最大表格高度時,請記住接下來顯示的項目:這是下一頁的起始索引。

后退一步比較棘手; 您需要記住您來自的頁面的起始索引才能做到這一點(如果您不這樣做,那么您必須獲取所有行,直到您當前顯示的行)。 這種方法的另一個問題是你不會事先知道有多少頁。

另一種方法是編寫一個查詢,為您提供每個類別的行數。 如果您有適當的索引,則只獲取那些不應該花費一整分鍾,即使它很昂貴,您也可以緩存結果。 使用此信息,您可以使用整個類別將數據分成最多 15 行的頁面(前提是沒有類別的條目超過 13 個)。 您甚至可以緩存分頁數據。 這種方法的缺點是你可能有稍微過時的分頁,所以當進行大量插入和刪除時,你可能偶爾會得到 16 或 17 行而不是 15 行。

在旁注中,您需要對您的客戶進行一些教育。 看起來不錯很好,但你不想給人一種印象,在有限的時間內任何事情都是可能的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM