我有一個照片隊列在一個攝影網站的主頁上顯示。攝影師傾向於一次上傳幾十張照片,這意味着選擇最佳上傳的編輯很可能會將來自同一攝影師的幾張照片一個接一個地放入隊列中。但我們不希望一個攝影師連續數小時擁有該主頁。在SQL中排序:最舊的記錄,但在x行內沒有重複值
目前,我們手動對隊列進行排序,使其儘可能以排隊的時間順序(FIFO)排隊,但同一攝影師沒有兩次拍攝距離超過五個插槽。我們想自動化這個。
我知道我們可以在PHP中進行排序,但是我們可以使用單個MySQL查詢以正確的順序檢索隊列嗎?
表結構看起來像這樣。我們通過交換相鄰的兩個鏡頭的queued_time隊列排序 - 幾乎理想,但它的工作原理:
homepage_queue
--------------
id INT NOT NULL
photo INT NOT NULL
queued_time INT NOT NULL
photos
------
id INT NOT NULL
photographer INT NOT NULL
一個瀏覽相關的SO問題丟給了這個頁面,這似乎表明,我需要效仿Oracle的LAG功能:http://onlamp.com/pub/a/mysql/2007/04/12/emulating-analytic-aka-ranking-functions-with-mysql.html?page=2
特別是當我考慮到我需要查看最後五行時,看起來很亂,以至於我試圖逃離尖叫並在PHP中執行它,但是有沒有更簡單的方法?
我們通常會將隊列填滿一週,每張照片一小時,因此我們在外面討論的可能是200條記錄。
在排隊結尾處肯定會有一些照片無法按照「五分開」的規則進行排序。這並不重要,因爲我們可能會每24小時運行一次該作業,並且在穩定的上傳流的情況下,排隊的尾端可能會變得很糟糕。
你是如何管理隊列的?根據我的理解,你從隊列中選出最重要的項目,並在你的網站上顯示一小時。然後你從隊列中選擇下一個項目,顯示一小時。等等。當你從隊列中選擇一個項目時,是否涉及刪除記錄?如果是這樣,你不能只保留已經在網站上的最後5位攝影師的記錄嗎?然後,當您從隊列中選擇最上面的項目時,只需執行'WHERE攝影師不在(SELECT * FROM last_five_photographers)'? * [你確實有**兩個**隊列來維護,但是使用非常簡單的查詢。] * – MatBailie
@Dems儘可能地發揮作用,但我們真的希望事先將隊列排序在最少一天,所以我們知道什麼時候會出現。這使得我們可以根據需要手動重新安排,例如在黃金時段在主頁上看到壯觀的景象,而不是當大多數觀衆睡着時。 –
這實際上不是一個簡單的約束。下一步將取決於之前的情況。這不是什麼*(我相信)*單個查詢即將解決。但是,您可以使用這種方法來構建真正的隊列,通過摺疊排來排隊。但是,如果你只想排列24張照片,循環24次並不會耗費時間。 – MatBailie