Insert Into on Duplicate Update会为我创建一个不需要的行

时间:2015-08-04 10:25:05

标签: php mysql duplicates sql-insert

我有一个SQL查询,如下所示 -

"INSERT INTO users(id, rank) SELECT v.user, v.vote FROM votes v WHERE
 v.assertion = '$ID' ON DUPLICATE KEY UPDATE 
rank = ( CASE WHEN v.vote = '1' THEN rank+50 WHEN v.vote = '-1' 
THEN rank-200 WHEN v.vote = '3' THEN rank+100 ELSE rank END)"

应用于具有表users的数据库和id和rank字段,以及带有用户和投票字段的votes表。我必须根据他们的投票更新users表中用户的排名。

我真的很喜欢这种查询,但我注意到了一个问题:每次我从PHP脚本执行此操作时,查询都会向users表中添加一行完全为空(只有一个ID,即A_I,并且排名为1,通常也会有其他领域)。我无法真正理解为什么会发生这种情况。

任何帮助/想法?

2 个答案:

答案 0 :(得分:0)

有两个可能的原因:

  1. id列不是主键,可能您的表根本没有主键。
  2. 像这样创建一个主键:

    <session-cookie http-only="false" secure="false"/>
    
    1. 如果在自动增量列中插入值alter table user add primary key (id) ,则会生成新的ID。自动递增列不得包含值0
    2. 您的方法还存在一个更普遍的问题:实际上您只插入用户ID和排名,表中缺少其他必填字段(用户名)。由于这个原因,0部分似乎无效。如果使用insert,则必须确保执行插入和更新的结果是正确的。

答案 1 :(得分:0)

您的表没有主键,首先提供id的主键

运行此sql查询 alter table user添加主键(id) 而不是尝试它将工作