2010-05-13 81 views
0

我想每天在我的網站上顯示報價。 24小時後應該改變。引號存儲在MySQL數據庫中。我怎麼做這個用PHP如何顯示24小時報價

感謝

馬修

+0

他們得到24小時後刪除?還是可以重複使用? – 2010-05-13 09:16:56

+0

是的,它是在一個單獨的表 – mathew 2010-05-13 09:30:19

+0

,不回答@羅素的問題:D – 2010-05-13 09:31:19

回答

0

如何一起使用的線下面的內容:

quotes 
------ 
quote_id 
.. 
. 

quote_rota 
---------- 
quote_rota_id 
quote_id 
date_shown 

然後使用查詢,如下面的獲得一個隨機的報價是不是過去7個報價已經之一顯示:

SELECT * FROM quotes WHERE id=(
    SELECT FLOOR(MIN(quote_id)+(RAND()*MAX(quote_id)) 
    FROM quotes 
) AND quote_id NOT IN (
    SELECT quote_id FROM quote_rota ORDER BY date_shown DESC LIMIT 7 
) LIMIT 1; 

// process and retrieve quote_id then store in quote_rota 

如果結果存儲在由cron作業/計劃任務填充的文件,那麼你可以有這種持久的,只要你願意(例如24小時,7天,1小時, Ë tc)

或者,您可以在報價表中添加一列,以表明它是「當前」報價(例如,活動),然後使用:

SELECT quote_id FROM quotes WHERE id=(
    SELECT FLOOR(MIN(quote_id)+(RAND()*MAX(quote_id)) 
    FROM quotes 
) AND quote_id NOT IN (
    SELECT quote_id FROM quote_rota ORDER BY date_shown DESC LIMIT 7 
) LIMIT 1; 

// process and retrieve quote_id then update "current" flag 

日程根據需要多次,然後使用類似這樣的任務如下得到報價:

SELECT * FROM quotes WHERE active = 1 
3

最簡單的方法是將存儲當天報價應該在網站上顯示爲在MySQL表中的列,然後作出該具體報價查詢像

$query = "SELECT * FROM quotes WHERE date = CURDATE();"; 

,如果你不存儲在數據庫中的日期,它變得更加困難和複雜 - 你不得不隨機顯示的條目,但跟蹤哪些表現出一個如果這樣的話,相同的報價不會在短期內達到兩倍割讓。所有這些都是可行的,但可能比必要的更復雜。

+0

也許有可能使用某種哈希機制來確定要顯示的報價?只要找出將日期映射到唯一報價記錄的方法即可。 – 2010-05-13 09:27:00

+0

@很好的主意!人們可以定義一個起點(例如,今天=第1行)並計算從該點開始的日期。第30天將是第30行,第31天第31行......等等。 – 2010-05-13 11:56:08

0

您需要爲每24小時運行一次的服務器設置一個cron選項卡。但是,設置它取決於你有什麼服務器。有關cron的更多信息,請致電http://en.wikipedia.org/wiki/Cron。如果您使用cPanel,www.upstartblogger.com/how-to-create-a-cron-job-in-cpanel可能會對您有所幫助。

0

很多方法。

其中一種方法是在引號表中添加2個列'is​​displayed'和'displayedwhen'。

使用這兩個額外字段,您可以跟蹤顯示哪個報價以及顯示多長時間。

0

如果你不希望使用任何緩存解決方案,你不想附加將來使用的日期爲每個引號,你可以這樣做:

SELECT id, quote FROM quotes WHERE date_used = NOW(); 

如果返回null,做是這樣的:

$count = SELECT COUNT(*) FROM quotes WHERE date_used = '0000-00-00' 

獲取未用引號的數量,然後隨機選擇一個報價:

$rand = rand (0, $count); 
$quote = SELECT id, quote FROM quotes WHERE date_used = '0000-00-00' LIMIT $rand, 1 
UPDATE quotes SET date_used = NOW() WHERE id = $quote['id'] 
+0

我的問題是假設我有兩個表格填充引號,其他是空的。當我調用命令顯示quots時,它應該插入到當前日期和時間的第二個。每次加載頁面時都應該檢查存儲的時間。當時間結束時,第二個表格中的數據必須更新另一個新的日期和時間。你怎麼看?? – mathew 2010-05-13 09:34:58

2

如果您有一組引號,則可以使用模數來確保當前日期和參考日期之間的差異將落入數據庫表中的引號數範圍內。

SELECT * 
FROM `quotes` 
WHERE id = DATEDIFF(CURDATE() , '2010-05-01') MOD (SELECT COUNT(*) FROM `quotes`) 
相關問題