好吧......我迷路了(再次)。我怎樣才能讓一個自定義的種子蘭特(),將保留選秀權從數據庫中的特定時間段10分鐘,1小時,1天等MySQL:隨機選擇持續一段特定時間?
我用這個:
$query = 'SELECT * FROM table order by rand() LIMIT 1';
每次刷新頁面時都會隨機挑選。我一直在閱讀好幾天,但我找不到一個例子來解釋如何製作一個自定義的種子,以保持特定時間段的選擇。請幫助我... 嘆息
好吧......我迷路了(再次)。我怎樣才能讓一個自定義的種子蘭特(),將保留選秀權從數據庫中的特定時間段10分鐘,1小時,1天等MySQL:隨機選擇持續一段特定時間?
我用這個:
$query = 'SELECT * FROM table order by rand() LIMIT 1';
每次刷新頁面時都會隨機挑選。我一直在閱讀好幾天,但我找不到一個例子來解釋如何製作一個自定義的種子,以保持特定時間段的選擇。請幫助我... 嘆息
正如多米尼克羅傑所說 - 蘭特秩序是可怕的。 但我發現使用cron太大的工作槍。(尤其是你不知道如何)
你還是產生在PHP中的隨機整數並存儲起來,並把它傳遞給MySQL來類似的東西:
SELECT * FROM table WHERE id=(MOD('.$php_generated_random.', LAST_INSERT_ID())+1)
它得到一個大的隨機數量和模數,所以它不會超過表的長度。
雖然這與LAST_INSERT_ID()
有問題。在很多情況下,你的mysql可能會返回0。
所以,我們要做的是,good'n'safe方式是:如果
並只做選擇其中id = $ sth
一旦您選擇了它,您需要將該數據存儲到會話中,並且可以將會話設置爲您指定的時間。無需每次都查詢數據庫。其次,查詢與爲指定時間設置廣告/時間無關。
再次 - 不知道如何做到這一點... -newbie- – Izumi 2010-02-04 13:25:42
ORDER BY RAND()
是一個非常糟糕的主意 - 它會殺死數據庫的性能。
這是你應該在cron工作上運行的事情,就像你想要「隨機選擇」持續的時間一樣,並存儲你隨機選擇的分鐘/小時/天的行ID。您需要注意確保該行不會被刪除。
從來沒有與cron作業,所以我不知道如何做到這一點。 – Izumi 2010-02-04 13:24:19
@lzumi - 去看看http://www.howtoforge.com/a-short-introduction-to-cron-jobs。 – 2010-02-04 13:30:47
「創建自定義種子」
我相信這個問題要你做這樣的事情:
$query = 'SELECT * FROM table order by rand (' . get_seed() . ') LIMIT 1';
<?php
// return the current hour. so the seed is the same each hour
function get_seed() {
return date('H');
}
?>
一個「種子」的目的是創建用於測試目的相同的隨機序列。
RAND(N)
如果指定了一個常量整數參數N,那麼它將用作種子值,它會生成一個可重複的列值序列。
您可以創建一個臨時表:
SELECT * INTO #temp FROM table ORDER BY rand() LIMIT 1
然後查詢臨時表來顯示數據。超時後刪除/重新創建表。
如果您正在使用PHP,您可以製作一個算法,該算法會生成一個隨機數(使用rand()),然後將該數字保存在數據庫或文件的某個位置。然後檢查當前日期和隨機數的生成日期。計算差異並使用if語句來確定是否需要再次生成隨機數。下面是一些僞代碼(注意,按日期我的意思是時間戳或Unix時間):
$gendate = getGenerationDateFromDB();
$now = getCurrentDate()
if(getDifference($gendate, $now) > [time interval]) then
$randnum = generateRandNumber();
saveRandNumberInDB($randnum);
saveGenDate();
else
$randnum = getRandNumberFromDB();
我對這個概念的想法,而不是一個正式的解決辦法:在向下取整,
使用md5()
UNIX_TIMESTAMP()/60
。在表中有許多記錄,讓它爲X.計算md5()
中的數字,讓它爲Y.計算Y % X
,讓它爲Z.在SQL的末尾使用limit 1 offset Z
。
事實上,你沒有從多種提案中選擇答案表明沒有人理解你想要什麼。我發現「特定時間段」和「每次刷新」都有衝突。你應該更好地描述問題。不要提你自己的「解決方案」 - 我認爲提到「定製種子」只是混淆了事情。請解釋數據庫的性質(真實應用程序或作業),隨機選擇(只是您的網頁或其他數據庫用戶)的用法,以及哪些條件觸發了另一個隨機選擇的需要。 – gary 2010-02-04 19:46:36