php + mysql插入带有多个匹配的重复键

时间:2013-06-17 18:14:58

标签: php mysql

目前我正在尝试创建一个可执行以下操作的脚本:

  1. 当用户点击按钮时,它会将它们添加到数据库中,并为他们点击按钮的prod提供点数。
  2. 如果它们已经存在于数据库中,使用该prod,而不是将新条目插入数据库,则应该通过添加到现有值来更新它们的点。
  3. 这是我到目前为止所做的,但它似乎不起作用(在某个时间点,它会插入,但不会更新,现在它似乎既不会这样做)

    //build the query - the command/request to give to the database
    $query = "INSERT INTO client (client.usrKey, client.name, client.prod, client.stage, client.points) VALUES
    ('" . $avatar_key . "', '" . $name . "', '" . $prod . "', '" . $stage . "', '" . $points ."')      
    ON DUPLICATE KEY UPDATE `points` = `points` +" . $points . " WHERE `slKey` = '" . $avatar_key . "' AND `prod` = '" . $prod . "'"; 
    

    对此的任何帮助都将非常感激。

    完全有可能我采取了错误的方法来解决这个问题,但是在搜索了几天之后,我对每种情况的推断都会提出强烈的建议来使用on duplicate key函数。

    提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

如果你重新思考“这些东西应该如何运作”,那就更好了

  1. 首先,当用户点击按钮时,您必须检查该用户是否存在
  2. 如果存在,则更新您插入的点。
  3. 你必须构建3个查询(我假设avatar_key是主键):

    $fetch_client = "SELECT * FROM client WHERE userKey = '".$avatar_key."'";
    // Check if exists with PHP and Mysql you know what to do :)
    if($clientExists){
    $update_client = "UPDATE client SET ... WHERE userKey = '".$avatar_key."'";
    }else{
    $insert_client = "INSERT INTO client (...) VALUES (...)";
    }
    

答案 1 :(得分:0)

你略微过度思考INSERT INTO ... ON DUPLICATE KEY - 语法。

看一下the manual,你会发现这个基本的例子:

INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;

在你的情况下大致如下:

INSERT INTO client (`usrKey`, `name`, `prod`, `stage`, `points`) VALUES
    ('whatever', 'values', 'needed', 'in', 'there')
ON DUPLICATE KEY UPDATE `points` = `points` + your_points;

(稍微简化一下,让你对最终产品的外观有所了解,你应该从这里知道你的步骤并将其包装成php代码)。

您还可以在多个任务中将其分解,具体取决于您的应用程序的需求。