2012-07-21 24 views
1

我正在製作一個健身日誌,室內劃手可以記錄結果。 爲了讓它變得有趣和激勵,我正在實施一個成就係統。 我喜歡取得這樣的成就,即如果有人在24周內排行超過90次,他們就會取得這樣的成就。可變時間範圍內的Mysql最大行數

有沒有人有一些提示,我可以如何在MYSQL中實現這一點。 日誌的mysql表非常簡單:id,userid,date(timestamp)等(其餘省略,因爲它並不重要)

jist是第一個rowdate和最後一個可以超過24周。

+0

這個問題很難在mysql中實現。我是否正確地假設,24周是從第一次排到...排到第90次的持續時間? – ajreal 2012-07-21 18:09:21

+0

是的,我希望它是武斷的,但我同意你,這將是很難實施。另一方面,在提交新的logentry之後,檢查成就。我只能計算在前面的90個日誌實際上是在那些24周內。 – 2012-07-22 16:58:27

回答

1

我從你的應用程序假設你想要最近的24周。

在MySQL中,你也這麼做:

select lb.userid 
from logbook lb 
where datediff(now(), lb.date) >= 7*24 
group by userid 
having count(*) >= 90 

如果你需要它的任意24周的時間,你可以修改的問題?

0

只需執行一個sql查詢來計算用戶在現在和24周前的行數。這是一個非常直接的查詢運行。

看看在mysql中使用datediff的東西來獲得現在和24周前的區別。

設置完腳本後,請設置一個cron作業,以便每天或每週運行一次,並對此執行一些自動操作。

0

我認爲你應該創建一個表格成就者,你用每天的成就來填充它。 您可以設置一個經常性的(每天,午夜前右)事件在其中運行這樣的查詢:在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

0

該查詢會給你的用戶總數的列表活動在24周內

select * from table groupby userid where `date` BETWEEN DATE_SUB(CURDATE() ,INTERVAL 168 DAY) AND CURDATE() having count(id) >= 90