2012-06-14 69 views
1

我有一張表格,裏面有引號排(ID, QUOTE),我有一個查詢來獲得隨機報價(ORDER BY RAND() LIMIT 0,1)。我知道它很慢,但我沒有太多的行。所以現在我想得到一天的報價。它應該是一個隨機引用,但在一天中不可更改。我不想添加新的列,我不想選擇當天的報價。我只是想要一個會得到一個隨機引用的查詢,但以某種方式來說,整天的報價將是相同的,第二天它將返回其他隨機引用。如何做到這一點SQL Palladins?如何獲得當天的隨機行?

+0

我建議你有一個計劃的任務,將得到一個隨機報價並將其保存到一些文本文件。這項任務每天執行一次。並閱讀此文件的內容,而不是每次要加載當天的報價時對數據庫進行查詢。 – yasar

回答

9

使用種子基於當前日期的隨機數生成器:

ORDER BY RAND(20120714) LIMIT 1 

我也好奇你說的「其他」在這裏的意思:

和第二天它將返回其他隨機報價。

如果你想每天選擇不同的隨機報價,那麼你不應該使用一個簡單的ORDER BY RAND(seed)。這可能會連續三天返回相同的報價。

如果您想避免發生這種情況,您可以改爲存儲每天選擇哪種報價,並從過去n天內未使用的報價中選擇隨機報價。當然,如果您在上次使用報價時進行存儲,那麼您的原始問題也有自然的解決方案:

  • 查找上次使用的報價。
  • 如果有,那就是當天的報價。
  • 如果不是,則從過去n天未使用的行中選擇一天中的新報價,並更新該行以顯示它是今天當天的報價。

我不想添加新列

OK,怎麼樣一個稍微不同的方法:

ORDER BY RAND(201207) LIMIT 14, 1 
--   yyyymm  dd 

現在你不需要額外的列,你不會得到重複,除了可能當月改變。此解決方案假定您至少有32個引號可供選擇。

+0

我喜歡1千行,所以它不是一個很大的風險,我有2倍相同的報價。即使它會發生 - 它不是一個biggie。 –

+0

rand(yyymm)的最後一個訂單如何工作?我無法弄清楚...... –

+0

@tomaszs:排序順序將在一個月的每一天都是相同的,每一天它會從列表中選擇下一個(限制偏移量更改)。當它到達下個月時,清單將被重新洗牌。 –

0

解決此問題可能涉及編寫一個應用程序,該應用程序每天一次選擇您的ID最大值和最小值;從該範圍計算一個隨機數;然後將該編號寫入文件。

負責打印報價的應用程序將根據 存儲在文件中的ID選擇報價。

現在有足夠的語言,如Python,Perl,PHP和其他語言有很好的數據庫接口。 Python也有一個隨機庫。