2011-11-11 42 views
2

我想在php + mysql中創建一個照片庫。「居中」mysql結果

URL viewphoto.php?id = 143顯示照片143. 在導航菜單中,我想顯示該專輯中的前兩張照片以及後兩張。

我想用的:

$temp_id = $id - 2; 
mysql_query("SELECT id, photo FROM photos WHERE album = {$album} AND id >= {$temp_id} LIMIT 5"); 

但沒有奏效,因爲來自不同的相冊照片的可能有之前和之後的觀察照片的一個的ID。

有誰知道我該怎麼做?

謝謝。

+2

您必須首先定義「上一個」和「下一個」。 **根據您的數據庫理解。** –

回答

4

我一直在處理這個問題我自己,我從來沒有發現一個優雅的解決這個問題,我結束了在兩個查詢做:

// next 
mysql_query("SELECT id, photo FROM photos WHERE album = {$album} AND id > {$id} ORDER BY id ASC LIMIT 2"); 

// prev 
mysql_query("SELECT id, photo FROM photos WHERE album = {$album} AND id <= {$id} ORDER BY id DESC LIMIT 3"); 

現在,在「分組」的第一個項目獲取一次將是當前的照片。

此解決方案確實需要檢查「prev」中的第一項實際上是請求的ID,因爲它不能確保它是正確的ID,以防系列中出現空白。

+0

這很簡單。在這兩個查詢之間有一個UNION,這正是我正在尋找的。謝謝! – ONOZ

+1

是的,工會會給出一個不錯的數組!但是,它會緩解數據庫服務器嗎? – zrvan

6

使用id排序圖片是一個壞主意。想象一下你刪除一張照片。你的連鎖照片將被打破。爲了解決它,你需要改變ID列,這是一個更糟糕的想法。

在一個相冊中使用單獨的索引列進行排序。如果圖片被刪除,該索引可以輕鬆重建。

或者您在表格中定義「上一個」和「下一個」列。這將包含最後和下一張圖片的ID。如果圖片被刪除,您只需要更改上一張和下一張圖片的這些列。

使用這兩種方法,例如,您可以使用嵌套自加入來訪問上一張和下一張2張圖片。評論這篇文章,如果你需要幫助。

+0

謝謝!我正在製作一個額外的分類專欄。這將做到這一點。 – ONOZ

+3

@Before雖然沒有什麼不好的使用ID,只要它的順序適合你。如果你刪除一張圖片,它將不會破壞。只有當您想手動更改訂單時,您才需要單獨的字段。 –