我在 MySQL 中有一张表,用户在其中发布事件。他们的个人 ID 已发布,因此他们发布的所有事件都可以与他们的帐户相关联。但是,我想放置一个自动增量字段,该字段当时仅计算 1 个用户的事件。
是否可以?如果是,我该如何实现?
例如,如果 ID 为 544 的用户发布了 4 个事件,则第 4 个将在自增列中标记为 4,即使它是表中的 421 个事件...
您可以输入这样的字段,但您需要一个触发器来使其保持最新。然后,如果行被更新或删除,维护变得具有挑战性。
不过,您可以很容易地在查询中模拟这一点,使用变量:
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
,但这在实践中似乎不会发生。