使用ON DUPLICATE KEY UPDATE和2个键

时间:2012-07-21 20:21:23

标签: php mysql sql codeigniter

我的表格中包含iduser_idpost_idlikeviews列。当用户单击“赞”按钮时,将在表格中添加一行,其中包含相应的user_idpost_idlike将设置为1。如果该行已存在且like列已为1,则不会发生任何事情。

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

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

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

或者更好的情况是将表格拆分为2个表格,一个用于post_id,另一个用于likes。如果是这种情况,我仍然需要根据viewsuser_id列使该行唯一。

或者做多个SQL查询?

请指教,谢谢!

2 个答案:

答案 0 :(得分:0)

  1. 将id丢弃为主键
  2. 使用两张桌子
  3. 将主键设置为(user_id,post_id)
  4. 当句柄插入时,执行插入忽略
  5. 当句柄插入视图时,执行插入..重复键更新视图=视图+ 1

答案 1 :(得分:0)

我建议您有一个喜欢的表,然后在您保留帖子的任何表中,为视图添加一行。因此,无论何时查看此帖子,您只需将该帖子的视图值更新为view = view + 1。

现在要解决您列出的有关主键的问题,您应该注意,您可以在该方案中使用唯一键,该键可以应用于多个列,并可以解决您遇到的问题。因此,例如,如果您的方案中有一个包含userid和postid的唯一键,则您的数据库将不允许该表中具有相同userid和postid的两个不同的行。

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