Php MYSQL更新(如果存在)或插入

Php MYSQL更新(如果存在)或插入,php,mysql,Php,Mysql,我一直在尝试让下面的SQL正常工作,但是它似乎跳过了insert函数。基本上,更新应该优先考虑,因为大部分时间都应该启动 UPDATE `teams-tasks` SET status=(:s), name=(:n), description=(:d), importance=(:i), applies=(:a) WHERE teamId =(:t) AND date=(:da) AND playerId =(:p) AND creatorId =(:c);

我一直在尝试让下面的SQL正常工作,但是它似乎跳过了insert函数。基本上,更新应该优先考虑,因为大部分时间都应该启动

UPDATE `teams-tasks`
        SET status=(:s), name=(:n), description=(:d), importance=(:i), applies=(:a) 
        WHERE teamId =(:t) AND date=(:da) AND playerId =(:p) AND creatorId =(:c);
        IF (SELECT ROW_COUNT() = 0);                    
        INSERT INTO `teams-tasks`
            ( status, date, creatorId, teamId, playerId, name, description, importance, applies ) 
        VALUES 
            ( (:s), (:da), (:c), (:t), (:p), (:n), (:d), (:i), (:a) ))
我做错了什么? 如果有必要的话,我将使用php pdo进行数据库连接


感谢

用户替换到查询中,确保如果行存在,它将更新数据,如果行不存在,它将插入日期

要检查重复条目,它会在内部比较主键

e、 g

e、 g

谢谢
Amit

用户替换到查询中,该查询确保如果行存在,它将更新数据,如果行不存在,它将插入日期

要检查重复条目,它会在内部比较主键

e、 g

e、 g

谢谢
Amit

您应该使用插入。。。关于重复密钥更新

比如说

INSERT INTO AggregatedData (datenum,Timestamp)
VALUES ("734152.979166667","2010-01-14 23:30:00.000")
ON DUPLICATE KEY UPDATE 
  Timestamp=VALUES(Timestamp)

你应该使用插入。。。关于重复密钥更新

比如说

INSERT INTO AggregatedData (datenum,Timestamp)
VALUES ("734152.979166667","2010-01-14 23:30:00.000")
ON DUPLICATE KEY UPDATE 
  Timestamp=VALUES(Timestamp)

我也尝试过如果@ROWCOUNT==0而没有任何luckkive也尝试过如果@ROWCOUNT==0而没有任何luckHow它是否确定存在重复键,因为我插入或更新的每个条目都有一个唯一的id。但是,多行的条目可能完全相同。这就是我在where is中使用的teamId、date和playerId,以确保它是该队球员在该日期的unque行。我将如何实现我的期望结果?在复制密钥更新状态=(:s),名称=(:n),描述=(:d),重要性=(:i),应用=(:a)上插入
团队任务(状态,日期,创建者ID,团队ID,玩家ID,名称,描述,重要性,应用)值(:s),(:da),(:c),(:t),(:p),(:n),(:d),(:a))其中teamId=(:t)和date=(:da)以及playerId=(:p)和creatorId=(:c),我理解其中的WHERE不能像上面的语句中那样实现在我上面的示例中,我的新表达式会变成:INSERT INTO
teams tasks
(状态、日期、创建者ID、团队ID、玩家ID、名称、描述、重要性,适用)重复密钥更新时的值(:s),(:da),(:c),(:t),(:p),(:n),(:d),(:i),(:a)),如果(团队ID=(:t)和日期=(:da)和玩家ID=(:p)和创建者ID=(:c)),则状态=(:s),名称=(:n),描述=(:d),重要性=(:i),适用(:a)当我插入或更新的每个条目都有一个唯一的id时,它如何确定是否存在重复的密钥。但是,对于多行,该条目可能完全相同。这就是我在where is中使用的teamId、date和playerId,以确保它是该队球员在该日期的unque行。我将如何实现我的期望结果?在复制密钥更新状态=(:s),名称=(:n),描述=(:d),重要性=(:i),应用=(:a)上插入
团队任务(状态,日期,创建者ID,团队ID,玩家ID,名称,描述,重要性,应用)值(:s),(:da),(:c),(:t),(:p),(:n),(:d),(:a))其中teamId=(:t)和date=(:da)以及playerId=(:p)和creatorId=(:c),我理解其中的WHERE不能像上面的语句中那样实现在我上面的示例中,我的新表达式会变成:INSERT INTO
teams tasks
(状态、日期、创建者ID、团队ID、玩家ID、名称、描述、重要性,适用)重复密钥更新时的值(:s),(:da),(:c),(:t),(:p),(:n),(:d),(:i),(:a)),如果(团队ID=(:t)和日期=(:da)和玩家ID=(:p)和创建者ID=(:c)),则状态=(:s),名称=(:n),描述=(:d),重要性=(:i),适用(:a)
INSERT INTO AggregatedData (datenum,Timestamp)
VALUES ("734152.979166667","2010-01-14 23:30:00.000")
ON DUPLICATE KEY UPDATE 
  Timestamp=VALUES(Timestamp)