我有一个表,在MySQL中,用户发布事件。他们的个人ID已发布,因此他们发布的所有活动都可以与他们的帐户相关联。但是,我想设置一个自动增量字段,该字段仅计算当时1个用户的事件。
有可能吗?如果是的话,我该如何实现呢?
例如,如果ID为544的用户发布4个事件,则第4个事件将在自动增量列中标记为4,即使它是表中的421个事件...
答案 0 :(得分:1)
你可以放入这样的字段,但是你需要一个触发器来保持它是最新的。然后,如果更新或删除行,则维护变得具有挑战性。
您可以使用变量非常轻松地在查询中模拟它:
select e.*,
@rn := if(@userid = userid, 1, @rn + 1) as UserSequenceNumber,
@userid := userid
from events e cross join
(select @rn := 0) const
order by userid;
如果要将值实际存储在表中,也可以将其合并到update
语句中。再说一遍,让我说,保持价值最新需要一堆触发器。
此外,上述工作在实践中。但是,MySQL不保证按顺序处理参数。因此,从理论上讲,@userid
可以在@rn
之前分配,但这在实践中似乎不会发生。