2011-11-25 16 views
3

我是一名網站開發人員,我需要幫助進行分析:我的(未來)網站或多或少是一個別墅目錄。人們可以在那裏添加他們的別墅。每個別墅將被存儲在數據庫中。如何使營業額在Mysql數據庫記錄上

我需要每頁顯示15個別墅,但我想要一個「翻身」(不確定這是否是英文正確的單詞)別墅:每小時,首先出現在第一頁上的別墅成爲最後一棟別墅頁面(所以每個別墅的等級增加1,除了第一個成爲最後一個)。我希望每個別墅都有相同的機會(或多或少)出現在第一頁上。我不想要一個完全隨機的系統。

我需要幫助如何使一個簡單的系統不會佔用大量資源(應該使用幾百萬條記錄)。

注:我不想使用別墅的ID,因爲如果一個人同時發佈3個不同的別墅,他們將全部顯示在彼此旁邊。

我的命題: 我創建了一個名爲「random_order」每個別墅場(整數),我把一個隨機數0和Max(整數)之間,我創建列「random_order」的指標。 然後,按照我想要的順序獲取記錄,我存儲(不知道還在哪裏)一個指向索引中記錄的變量。然後每個小時,我增加1個這個變量(用一個模)。 我不是指數專家,所以我不確定是否可以做到這一點,以及如何去做。我不知道是否有更好的方法來做到這一點...

請問如果這是正確的,或者你有更好的想法嗎?

謝謝

+0

即時通訊只是想知道爲什麼如果你不想隨機系統,你正在創建一個名爲「隨機順序」的字段?第二個顯示索引是如何擺脫某個人一次放3個東西的問題呢?它更好地把實際的代碼放在這裏我認爲比理論的東西,但我沒有老兵。祝你好運。 – 2011-11-25 12:24:08

+0

那麼我發佈我的分析,所以如果我的想法是愚蠢的(它似乎是這種情況,因爲你提出更好的建議)然後我不花時間在愚蠢的東西......但如果你更喜歡代碼,它會如果你能告訴我如何製作出符合我需求的第二個索引,那麼請幫助我很多。 Tks – viv

+0

嘿雪茄,您的評論又回來了!請告訴我更多關於您的解決方案。我不明白如何製作隨機位置的指數。 tks – viv

回答

0

你可以做的另一件事,是存儲計數變量 - 從0至MAX,並不斷更新。然後在(random_order + count)上查詢服務器前15個別墅(使用ORDER BY ASC/DESC)。這將防止需要每隔一小時更新一次列 - 只有計數變量需要更新。

編輯:

首先你會得到數(從已保存的話),並將其存儲在一個變量 - 計數。 然後執行一個查詢像

SELECT *, (random_order + <count>)%MAX_VAL AS villa_order 
FROM villa_table 
ORDER BY villa_order ASC 
LIMIT 15 

這將避免不必要的不​​斷向updations你的索引列。

編輯2:

確定後進一步分析,這是我怎麼會做到這一點。
執行一個簡單的選擇查詢

SELECT * FROM villa_table 
WHERE random_order > count 
ORDER BY random_order 
LIMIT 15 

如果行的結果集的數量< 15則在剩餘的記錄從使用開始填寫。

SELECT * 
FROM villa_table 
ORDER BY random_order ASC 
LIMIT <number of rows to be filled> 

即使在索引列上的20m行上,這也需要< .5s。

+0

我不明白與我的主張的區別:你有一個計數變量(和我一樣)和一個關於「random_order + count」的索引。我不明白你怎麼能把一個索引放在「random_order + count」上,因爲「random_order」是一個列,「count」是一個變量。 – viv

+0

「random_order + count」沒有索引。 random_order上有一個索引。計數只是添加到它的查詢中,所以整個列表不必不斷更新。 –

+0

你的代碼只適用於random_order列的值是唯一的,只有1而且從0開始。因此,如果我有{villaA:20 villaB:12 villaC:31}那麼它不工作... – viv