2009-10-19 183 views
0

基本上我的系统是用户每10条评论就获得奖励。所以,在数据库中,一个表格捕获评论,另一个表格每增加10条评论就会获得一个奖励。例如,如果用户添加了40条评论,他们将在表2中有4个奖励/ 4行。在另一个表中为每个第n个条目添加一行

对我来说这听起来很简单,但我似乎无法想象它。也许有一个模数运算符可以帮助,但我需要每次在表2中添加一个新行,而不是覆盖,或者每次重写行。

帮助赞赏;我有一种感觉,就在我面前!

回答

0

我猜你有第一张表的模型,或者至少有一个插入的函数。你C和一些更多的功能该功能,并且这样做:

$current = count_your_current_coments(); 
if (fmod($current, 10) == 0) { 
    insert_into_second_Table(); 
} 
0

您将不得不计算用户每次发表评论时添加的评论数量。如果注释%10 == 0,那么你将不得不在你的表2中添加一个新行(用于奖励)。

0
  • 插入
  • SELECT COUNT()为一个用户
  • if number_of_comments % 10 == 0的评论 - >不要插入奖励表

这是我应该做的方式。

2

奖励是否独一无二,以至于您实际上有在单独的表中跟踪它们?或者您可以只计算用户在需要时提出的评论数量?

在你确实需要跟踪一个单独的表的回报,考虑触发事件:

create trigger insert_trigger after insert on comments_table 
for each row begin 
    if (select count(*) from comments_table where user_id = new.user_id) mod 10 = 0 then 
     insert into rewards_table (user_id) values (new.user_id); 
    end if; 
end; 

如果允许从comments表删除,你还需要对相应的on delete触发评论表,用于测试用户是否仍然有正确的奖励数量,如果不是,则必须决定要删除哪个奖励。

0

我的想法是,你需要做更多的领域为标志。你可以将它命名为enum。 '是'或'否'。每次插入评论时,您都可以保存默认的'N'并检查数据库。

SELECT count(my_comment) FROM comments WHERE rewarded = 'N'; 

使用modulo来检查它是否达到10条评论。如果是,则向另一个表中插入一行并将'N'奖励字段更新为'Y'

相关问题