Php 重复更新时插入将创建不需要的行
我有一个SQL查询,如下所示-Php 重复更新时插入将创建不需要的行,php,mysql,duplicates,sql-insert,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 ra
"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)"
应用于具有表用户
和id及等级字段的数据库,以及具有用户和投票字段的投票
表的数据库。我必须根据用户的投票更新用户表中用户的排名
我真的很喜欢这种查询,但我注意到了一个问题:每次我从PHP脚本执行这种查询时,查询都会向users表中添加一行完全为空(只有一个ID,它是一个_I,秩为1,而通常还有其他字段)。我真的不明白为什么会这样
有什么帮助/想法吗?可能有两个原因:
alter table user add primary key (id)
0
,将生成一个新id。自动递增的列不能包含值0
您的方法还有一个更普遍的问题:事实上,您只插入用户id和排名,表中的其他必填字段(用户名)丢失。因此,
insert
部分似乎无效。如果在重复密钥更新时使用插入
,则必须确保执行插入和更新的结果是正确的 可能有两个原因:
alter table user add primary key (id)
0
,将生成一个新id。自动递增的列不能包含值0
您的方法还有一个更普遍的问题:事实上,您只插入用户id和排名,表中的其他必填字段(用户名)丢失。因此,
insert
部分似乎无效。如果在重复密钥更新时使用插入
,则必须确保执行插入和更新的结果是正确的 您的表没有主键。请首先为id提供主键
运行此sql查询
alter table user add主键(id)
然后再试一次,它会起作用。您的表没有主键。请首先为id提供主键 运行此sql查询 alter table user add主键(id)
然后再试试,它会起作用的我没想到它会起作用。您可以展示一些示例表/数据来演示这一点(可能是在SQLFIDLE中)。显示表的完整架构users表的id字段上是否有唯一键?您正试图在第二次插入基于此相同id(用户)的重复行?您确定v.user和v.vote已经存在吗?正在尝试让sql fiddle工作,同时我将发布pastebin,希望有帮助。谢谢我没想到会这样。您可以展示一些示例表/数据来演示这一点(可能是在SQLFIDLE中)。显示表的完整架构users表的id字段上是否有唯一键?您正试图在第二次插入基于此相同id(用户)的重复行?您确定v.user和v.vote已经存在吗?正在尝试让sql fiddle工作,同时我将发布pastebin,希望有帮助。谢谢id是用户的主要属性,id、断言是投票的主要属性。对吗?在a_I ID字段中确实是一个0值。非常感谢。id是用户的主要部分,id、断言是投票的主要部分。对吗?在a_I ID字段中确实是一个0值。非常感谢。已经尝试过,甚至放弃并再次创建了它。同样的问题。你能显示完整的数据库模式吗??这样我就可以解决这个错误了。我已经尝试过了,甚至放弃并重新创建了它。同样的问题。你能显示完整的数据库模式吗??这样我就可以纠正错误了。