Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 重复更新时插入将创建不需要的行_Php_Mysql_Duplicates_Sql Insert - Fatal编程技术网

Php 重复更新时插入将创建不需要的行

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

我有一个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)"
应用于具有表
用户
和id及等级字段的数据库,以及具有用户和投票字段的
投票
表的数据库。我必须根据用户的投票更新用户表中用户的排名

我真的很喜欢这种查询,但我注意到了一个问题:每次我从PHP脚本执行这种查询时,查询都会向users表中添加一行完全为空(只有一个ID,它是一个_I,秩为1,而通常还有其他字段)。我真的不明白为什么会这样


有什么帮助/想法吗?

可能有两个原因:

  • id列不是主键,而且您的表可能根本没有主键 创建一个主键,如下所示:

    alter table user add primary key (id) 
    
  • 如果在自动递增列中插入值
    0
    ,将生成一个新id。自动递增的列不能包含值
    0

  • 您的方法还有一个更普遍的问题:事实上,您只插入用户id和排名,表中的其他必填字段(用户名)丢失。因此,
    insert
    部分似乎无效。如果在重复密钥更新时使用
    插入
    ,则必须确保执行插入和更新的结果是正确的

    可能有两个原因:

  • id列不是主键,而且您的表可能根本没有主键 创建一个主键,如下所示:

    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值。非常感谢。已经尝试过,甚至放弃并再次创建了它。同样的问题。你能显示完整的数据库模式吗??这样我就可以解决这个错误了。我已经尝试过了,甚至放弃并重新创建了它。同样的问题。你能显示完整的数据库模式吗??这样我就可以纠正错误了。