2011-12-28 77 views
0

當我從mysql中拖出行並將它們展開時,我將行總數除以例如。 20所以我得到的頁數。
但是,當我查看一行的詳細信息時,我想回到同一頁面的鏈接。 (例如,第33頁上的唯一ID爲1451的行。 <a href="?show=rows&page=33">Back</a>從mysql計算頁面x0

如何確定在mysql中哪些頁面是唯一ID?


*** UPDATE *
該溶液可以在這裏找到:
MySQL get row position in ORDER BY

+0

長話短說:你不能做到這一點。你無法做到這一點的原因是因爲'auto_increment'可能有差距。您可以使用以下順序的ID:'1,2,3,1500,1501,2900,2920' - 它們都適合第一頁。有什麼可以幫助的是有另一個**列,比如sequence_id,它將以1的順序依次枚舉你的記錄(每一個下一行的sequence_id增加1)。問題是你必須將它從數據庫中刪除。 – 2011-12-28 11:00:44

+0

是的,這是問題,我使用ORDER BY column.created。 但我發現這個解決方案http://stackoverflow.com/questions/3614666/mysql-get-row-position-in-order-by當它發生在我身上,ORDER BY是一個問題。 – 2011-12-28 12:11:43

回答

0

鴻溝ID 20,並使用圓()的結果。

+1

Round不會返回有效的頁碼。例如。 'round(1/20)== 0 // page 0','round(10/20)== 1 // page 1' while both should be in page 1 – Krzysztof 2011-12-28 10:36:57

+1

ID 1會使用round()給頁面0。你需要'ceil()'來代替。 – Gareth 2011-12-28 10:40:21

+0

好點,沒想到一個通過,謝謝! – 2011-12-28 13:36:15

1

假設您顯示由ID排序行,下面的查詢將返回位置:

SELECT COUNT(*) position FROM tbl WHERE uid < 1451 

有了這個位置,你可以使用公式計算頁:1 + floor($position/20)。 如果數據中存在一些空白,則查詢是必要的。如果你沒有任何間隙使用公式:1 + floor(($id - 1)/20)

+0

它工作的方式很好,但我使用order.column.create,我已經做了一些手動導入相同的日期。所以我不得不考慮更遠,我從這裏http://stackoverflow.com/questions/3614666/mysql-get-row-position-in-order-by – 2011-12-28 12:09:49

1

ceil()功能和一些部門是所有你需要:

$pagenumber = ceil($id/$resultsperpage); 
+0

問題是@ N.B。說。像這樣的'1,2,3,1500,1501,2900,2920'這樣的順序將會給出不正確的結果。 – 2011-12-28 12:18:17