2012-07-21 191 views
1

我有一个表格,其中列id,user_id,post_id, like, views。当用户点击Like按钮时,一行将被添加到相应的user_idpost_id表中,并且like将被设置为1。如果该行已经存在并且like列已经是1,则什么也不会发生。使用带有2个密钥的重复密钥更新

当用户访问特定页面,一行将被添加到表与相应的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的行,则只会复制该行。

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

或者更好的情况是将表格拆分成2个表格,一个用于likes,另一个用于views。如果是这种情况,我仍然需要根据user_idpost_id这两列设置唯一的行。

或者做多个SQL查询?

请指教,谢谢!

回答

0

我建议你有一个喜欢的表,然后在任何表,你保留的职位,你添加一排意见。因此,无论何时查看该帖子,只需更新该帖子的视图值即可查看=查看+ 1.

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

所以,以供将来参考,使用唯一的关键,如果你需要:)

+0

所以我创建两个'user_id'和'post_id'列的唯一键,主键仍然是'id'? 'ALTER TABLE''喜欢''ADD ADD UNIQUE( \'user_id \', \'post_id \' );' – Nyxynyx 2012-07-21 21:08:04

+0

正好!如果需要,您可以拥有唯一的密钥和主键 – 2012-07-23 19:03:18

0
  1. 丢弃id作为主键
  2. 使用两个表
  3. 使上(USER_ID,POST_ID)主键
  4. 当手柄插入件等,做一个刀片忽略
  5. 当手柄插入视图,做一个插入..重复密钥更新视图=视图+ 1