我有一个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,通常也会有其他领域)。我无法真正理解为什么会发生这种情况。
任何帮助/想法?
答案 0 :(得分:0)
有两个可能的原因:
像这样创建一个主键:
<session-cookie http-only="false" secure="false"/>
alter table user add primary key (id)
,则会生成新的ID。自动递增列不得包含值0
。您的方法还存在一个更普遍的问题:实际上您只插入用户ID和排名,表中缺少其他必填字段(用户名)。由于这个原因,0
部分似乎无效。如果使用insert
,则必须确保执行插入和更新的结果是正确的。
答案 1 :(得分:0)
您的表没有主键,首先提供id的主键
运行此sql查询 alter table user添加主键(id) 而不是尝试它将工作