我目前正在一個網站上顯示在線商店列表, 每個商店都將存儲在我的數據庫中,我將使用PHP來選擇並顯示它們。PHP>按名稱排序查詢結果,同時讓每個字母有時位於頂部
但是既然這些商店會支付我的費用,我想讓每個商店有時候都在排行榜的頂端, (例如,如果商店名稱以「Z」開頭,他們可能會抱怨所有時間都在列表底部,所以我想保持公平)。
所以我想讓每個字母在列表的頂部一個小時,但我不知道該怎麼做.. 這甚至可能嗎?
在此先感謝!
我目前正在一個網站上顯示在線商店列表, 每個商店都將存儲在我的數據庫中,我將使用PHP來選擇並顯示它們。PHP>按名稱排序查詢結果,同時讓每個字母有時位於頂部
但是既然這些商店會支付我的費用,我想讓每個商店有時候都在排行榜的頂端, (例如,如果商店名稱以「Z」開頭,他們可能會抱怨所有時間都在列表底部,所以我想保持公平)。
所以我想讓每個字母在列表的頂部一個小時,但我不知道該怎麼做.. 這甚至可能嗎?
在此先感謝!
我會顯示一個單獨的盒子,並在它只是一個商店把它稱爲「當今的挑」什麼類型的這一點很快的。這樣,您可以偶爾將以「Z」開頭的商店推到頂部,同時保持用戶正常排序的商店列表體驗。
然後使用數據庫來保存哪個商店已經在「今天的選擇」框中多少次,讓他們都平等。
在沒有爲模式添加「優先級」字段的情況下(雖然有可能,它最多隻會令人費解),但直接在SQL中處理這個問題並沒有任何理智的方法(我知道)。這就是說,這裏有兩個建議:
修改您的模式
一個簡單的「優先權」字段添加到相關模式和按優先級排序,姓名(或任何默認是)。您當然需要每小時重置優先級字段,但這是一項相當平凡的任務。
處理它在PHP
開展查詢按往常一樣。
將所有結果都抓取到數組中。
根據當前小時根據需要重新排列優先順序。 (您需要array_splice您想要從陣列中跳出的項目,然後array_unshift將它們置頂。)
基於數組的輸出。
這當然會變得更復雜/效率更低,如果你需要處理分頁,但基本的想法是相同的。
一個很好的解決方案是將另一列添加到帶有商店名稱的數據庫中,並將其稱爲「last_shown」,然後當您顯示該商店時,使用時間戳更新列,並且每個選擇都執行如下操作:
「SELECT名稱,連接距離商店ORDER BY last_shown DESC」
然後在PHP你可以檢查
<?php
if($row['last_shown']+3600 > now()){
//run select but in ASC order
//update the new row's column to the current timestamp
}
?>
這樣,它只會更新一次一小時,但除此之外,它會繼續選擇在列表頂部購物R上的小時
抱歉它是一個有點亂,我只是在工作
如圖所示店可以在架構 2)order by shown_times asc
3)&添加 1)額外列shown_times你會+1
或
另一種解決方案: 你甚至可以使用ORDER BY RAND()
還有一點需要記住的是,即使您希望對開店者「公平」,您也希望保持網站與您v的一致性isitors。如果你的訪客不斷尋找到商店的鏈接,因爲它不斷移動,他們會感到沮喪,可能不會使用你的網站。在我看來,您需要找到一種方式來對開店者「公平」,同時爲訪客保持一致的體驗。 – 2011-01-10 16:40:33