Mysql错误1064使用SQLVars

时间:2017-09-05 22:40:46

标签: mysql sql

阅读此主题后:MySQL - Subtracting value from previous row, group by

我使用了最受欢迎的答案中描述的方法并编写了以下代码:

SELECT 
      T.id_str, 
      T.created_at, 
      T.retweet_count, 
      T.tweeted_at,
      if (@lastid_str = T.id_str, T.retweet_count - @lastretweet_count, 0000.00) as RetweetChange,
      @lastid_str := T.id_str,
      @lastretweet_count := T.retweet_count
   FROM 
      Tweets T, 
      (SELECT @lastid_str := 0, 
              @lastretweet_count :=0 ) SQLVars
   ORDER BY 
      T.tweeted_at DESC, 
      T.id_str;

旧问题解决了,新问题:如何编写触发器。

enter image description here

我的表看起来像这样。其中id_str是特定推文的唯一标识符。由于我每分钟从一个用户插入50条推文,因此会有很多相同的id_str。我想看的是每分钟转换retweet_count。 tweeted_at是用户发推文时,created_at是将此数据插入到我的数据库中。我想为插入数据库的每个新数据生成retweet_change,而不是相同的旧推文(进入列retweet_change)。我应该怎么写触发器?

1 个答案:

答案 0 :(得分:0)

特别是在基于网络的解决方案中,计数器和聚合是常见的,数据有点静态(即:旧数据不变,被删除等),并且可以添加新数据,触发器可以提供帮助。

您可以在适当的位置添加一些您想要这些聚合的列。然后,当一个新记录被添加到一个表中时,汇总表(或转发之类的父ID)可以用1或更多来更新,或者如果是其他如金融,订单数量等,则可以更新。这将简化您的计数因为在添加条目时总计会一直运行。

通过预先汇总和更新相关记录,您只需要在触发器到位后准备计数,然后其余部分继续保持同步。