【发布时间】:2015-08-13 18:55:55
【问题描述】:
表结构为:
user
-----
id
video
------
id
user_views
----------
id
user_id
video_id
create_date
并且user_views可以重复,为了防止数据变得非常庞大,我想限制user_views记录:
每个用户最多可以记录20个user_views,如果超过,将替换最旧的记录,先进先出的方式
问题是,如何构造插入查询?
现在我的方法是使用 PHP
- 统计特定用户的行数。
- 如果 > 20 ,更新最后一条记录(按 create_date 排序)
- 否则,插入新记录
它可以工作,但我想要一种性能更高的方式,即在 MYSQL 中进行一次插入查询。
感谢您的帮助。
【问题讨论】:
-
没有办法在一个 INSERT 查询中做到这一点。您还必须运行 DELETE。它们都有各自的功能,你不能将它们混合在一起。
-
考虑使用触发器?
-
好吧,即使使用触发器也无法完成,因为触发器必须是
before insert并且条件为if > 20它应该更新同一个表,并且不允许在触发器中更新同一个表正在执行其他触发器。 -
@AbhikChakraborty,很好的意见。存储过程如何插入/更新/删除 - 并且只授予用户选择权限?
标签: php mysql sql performance