【发布时间】:2015-10-26 17:02:45
【问题描述】:
我有一个 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 表。我必须根据他们的投票更新用户表中用户的排名。
我真的很喜欢这种查询,但我注意到了一个问题:每次我从我的 PHP 脚本执行这个查询时,查询都会在完全空的用户表中添加一行(只有一个 ID,即 A_I,并且排名为 1,通常还会有其他字段)。我实在想不通为什么会发生这种情况。
有什么帮助/想法吗?
【问题讨论】:
-
我没想到会这样。您能否展示一些示例表/数据来证明这一点(可能在 sqlfiddle 中)。
-
显示表的完整架构
-
用户表的 id 字段是否有唯一键?并且您正在尝试第二次插入基于相同 ID(用户)的重复行?
-
您确定 v.user 和 v.vote 已经存在吗?
-
尝试让sql fiddle工作,同时我会发布pastebin,希望对您有所帮助。 pastebin.com/heiXJZsi 谢谢!
标签: php mysql duplicates sql-insert