我正在製作一個健身日誌,室內劃手可以記錄結果。 爲了讓它變得有趣和激勵,我正在實施一個成就係統。 我喜歡取得這樣的成就,即如果有人在24周內排行超過90次,他們就會取得這樣的成就。可變時間範圍內的Mysql最大行數
有沒有人有一些提示,我可以如何在MYSQL中實現這一點。 日誌的mysql表非常簡單:id,userid,date(timestamp)等(其餘省略,因爲它並不重要)
jist是第一個rowdate和最後一個可以超過24周。
我正在製作一個健身日誌,室內劃手可以記錄結果。 爲了讓它變得有趣和激勵,我正在實施一個成就係統。 我喜歡取得這樣的成就,即如果有人在24周內排行超過90次,他們就會取得這樣的成就。可變時間範圍內的Mysql最大行數
有沒有人有一些提示,我可以如何在MYSQL中實現這一點。 日誌的mysql表非常簡單:id,userid,date(timestamp)等(其餘省略,因爲它並不重要)
jist是第一個rowdate和最後一個可以超過24周。
我從你的應用程序假設你想要最近的24周。
在MySQL中,你也這麼做:
select lb.userid
from logbook lb
where datediff(now(), lb.date) >= 7*24
group by userid
having count(*) >= 90
如果你需要它的任意24周的時間,你可以修改的問題?
只需執行一個sql查詢來計算用戶在現在和24周前的行數。這是一個非常直接的查詢運行。
看看在mysql中使用datediff
的東西來獲得現在和24周前的區別。
設置完腳本後,請設置一個cron作業,以便每天或每週運行一次,並對此執行一些自動操作。
我認爲你應該創建一個表格成就者,你用每天的成就來填充它。 您可以設置一個經常性的(每天,午夜前右)事件在其中運行這樣的查詢:在mysql中
delete from achievers;
insert into achievers (
select userid
from logbook
where date < currenttimestamp and date > currenttimestamp - 24weeks
group by userid
having count(*) >= 90
)
事件:http://dev.mysql.com/doc/refman/5.1/en/events-overview.html
該查詢會給你的用戶總數的列表活動在24周內
select * from table groupby userid where `date` BETWEEN DATE_SUB(CURDATE() ,INTERVAL 168 DAY) AND CURDATE() having count(id) >= 90
這個問題很難在mysql中實現。我是否正確地假設,24周是從第一次排到...排到第90次的持續時間? – ajreal 2012-07-21 18:09:21
是的,我希望它是武斷的,但我同意你,這將是很難實施。另一方面,在提交新的logentry之後,檢查成就。我只能計算在前面的90個日誌實際上是在那些24周內。 – 2012-07-22 16:58:27