2012-11-14 24 views
1

鑑於分頁結果集中特定元素的MySQL主鍵,是否有函數來獲取元素所在的頁碼?確定項目可能在哪個頁面上?

如果不是,什麼是可以幫助我到達那裏的僞代碼?請注意,主鍵可以刪除,並且將有序列呆這麼簡單的算術可能無法正常工作的「空白」 ......

回答

2
SELECT COUNT(*) as amountBefore FROM `table` WHERE `id` <= 'id' 

page = ceil(amountBefore/amountPerPage) 
+2

聰明的一個:)但<=在Where子句中會更好 – Svetoslav

+0

你是對的,在我的回答中編輯:) – Geert

+1

不會工作,如果你需要通過除id以外的任何東西(或任何不是id或與ID同步)也可能會很棘手,如果你有一個組合的密鑰和/或你的密鑰不是數字 – Hannes

2

事情是這樣的:

SELECT FLOOR(POSITION/15) FROM (
    SELECT @rownum:[email protected]+1 as POSITION, id 
    FROM table_name, (SELECT @rownum:=0) r 
    ORDER BY published DESC 
) t WHERE id = 17; 

(給你的ID爲17,你的每個頁面項目爲15,而你通過訂購屬性是published

但要知道,任何解決方案(如果你在PHP中做到這一點更是這樣)是有點wastefull因爲很多數據是temporarilly收集 - 如果它以任何方式possible試圖通過路由/獲取參數/網址接收當前頁面。

+0

感謝您提供後面的建議,但問題不在於獲取當前頁面,而是在沒有實際分頁的情況下查找元素的頁碼。 –

+0

@aditya menon這就是爲什麼我說「如果它在任何情況下possibile」:)在任何情況下,據我瞭解,我的事情應該工作 – Hannes

+0

嗨,我試過'選擇地板(位置/ 10) 從( SELECT @rownum:= @rownum 1 AS POSITION,DOMAIN_ID FROM域,( SELECT @rownum:= 0 )R ORDER BY域ID DESC )噸 WHERE域ID = 18' 以我域表,並我總是得到0作爲輸出(在phpMyAdmin中) - 我做錯了什麼? –

相關問題