2012-01-29 90 views
2

我試圖做一個圖像數據庫不保持一致的記錄的ID。例如,它可能會去1,2,6,7,12,但正如你所看到的那樣只有5行。 在表格中我有fileid和filename。我創建了一個PHP腳本,在給出fileid時向我顯示圖像。但是如果我給它不存在的ID 5,我會得到一個錯誤。這很好,因爲我想爲此提供一個錯誤信息,但對於使用前進和後退按鈕瀏覽這些圖像的用戶而言,這沒有問題。前進和後退按鈕需要檢索給定ID之後的真實fileid。希望這是有道理的。如何獲得MySQL中特定行的偏移量?

這就是我想象中的代碼看起來像:

SELECT offset(WHERE fileid=4) 

這將使我在哪裏的fileid等於4。我覺得這是很容易理解的行的偏移​​。我需要的原因是創建前進和後退按鈕。所以我打算加1或從偏移量中取1,這個偏移量給了我新的ID和新的文件名。這樣當用戶瀏覽它時,會自動跳過死ID值,但當給出一個錯誤的ID時它會給出錯誤。

+0

你到處都會看到這樣的「錯誤」,即使在這裏,在stackoverflow上,頁面完全「不起作用」。 – djot 2012-01-29 07:17:49

回答

3

往上走:

SELECT * FROM table WHERE id > 'your_current_id' ORDER BY id LIMIT 1; 

下鄉:

SELECT * FROM table WHERE id < 'your_current_id' ORDER BY id DESC LIMIT 1; 

PS:這是更好地使LIMIT 2,這樣就可以看到你在第一次或前一紀錄在數據庫中只返回一條記錄。

1

如果結果是由X有序,上升,下面會給你的表格你當前offeset:

SELECT COUNT(*) FROM tablename WHERE x < x_of_your_current_item; 

如果你只是想選擇下一首或上行時,你可以跳過不必僅通過直接選擇一行做兩個查詢:

SELECT * FROM tablename WHERE x > x_of_your_current_item ORDER BY x LIMIT 1; 

會給你下一個項目(以及類似<並添加DESC的訂單由會給你以前)。

+0

我用這種方法來檢查哪一行是在哪個頁面上(例如,如果每頁分頁是10頁) – 2014-03-25 13:58:26

-1
SELECT * FROM table WHERE ... ORDER BY id DESC LIMIT 50,10; 
SELECT * FROM table WHERE ... ORDER BY id DESC LIMIT 60,10; 
SELECT * FROM table WHERE ... ORDER BY id DESC LIMIT 70,10; 
+0

如上所述,如果在此期間圖像被刪除,分頁「跳轉」,但你不能真正避免。 – djot 2012-01-29 07:27:36

0

您可以使用偏移量。最初將偏移量設置爲零。 第一次您的查詢就會 SELECT * FROM表順序的table_id限制0,1

和未來 SELECT * FROM表順序的table_id LIMIT 1,1 .. 等

這樣人們會從頭到尾記錄。

現在關於後退和前進按鈕。

  • 後退按鈕:第一次,或當偏移爲零禁用後退按鈕

  • 前進按鈕: 當您查詢您檢查下一個記錄當前記錄過 即在這個查詢之後 SELECT * FROM TABLE order by table_id LIMIT 0,1觸發這樣的查詢 SELECT * FROM TABLE order by table_id LIMIT current_offset + 1,1並檢查查詢是否產生任何結果,如果它產生結果然後設置一個boolean say next = TRUE else next = FALSE;

使用此布爾啓用或禁用向前按鈕。背面按鈕的點擊

一件事送偏移量爲current_offset - 1和前進按鈕current_offset + 1

我希望這有助於。我剛剛遇到了這個問題,並想到了這個解決方案。