使用带有2个键的ON DUPLICATE KEY UPDATE


Using ON DUPLICATE KEY UPDATE with 2 keys

我有一个列为iduser_idpost_idlikeviews的表。当用户单击"点赞"按钮时,将向表中添加一行,其中包含相应的user_idpost_id,并且like将设置为1。如果行已经存在,而like列已经是1,则不会发生任何事情。

当用户访问特定页面时,表中将添加一行,其中包含相应的user_idpost_id,并且view将设置为1。但是,如果该行已经存在,则view中的值将递增。

问题:我尝试使用INSERT INTO mytable ... ON DUPLICATE KEY UPDATE like = 1,但表的主键是id,而不是user_idpost_id。如果我将主键设置为user_idpost_id,就会出现问题,因为只有当存在具有相同user_idpost_id的行时,该行才会重复。

在这种情况下,应该如何构建查询?

或者,更好的情况是将表拆分为两个表,一个用于likes,一个为views。如果是这种情况,我仍然需要基于user_idpost_id列使行唯一。

还是执行多个SQL查询?

请建议,谢谢!

我建议你有一个点赞表,然后在你保存帖子的任何表中,添加一行视图。因此,每当查看这篇文章时,只需将该文章的视图值更新为view=view+1。

现在,为了解决您概述的关于主键的问题,您应该注意,您可以在该场景中使用唯一的键,它可以应用于多个列,并可以解决您遇到的问题。因此,例如,如果在您的场景中,您有一个包含userid和postid的唯一键,那么您的数据库将不允许该表中的两个不同行具有相同的userid和postid。

因此,为了将来参考,如果需要,请使用唯一的密钥:)

  1. 放弃id作为主键
  2. 用两张桌子
  3. 在(user_id,post_id)上生成主键
  4. 当处理insert时,执行insert忽略
  5. 处理插入视图时,执行插入操作。。重复密钥更新视图=视图+1