-3

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

  1. 当用户单击按钮时,它会将它们添加到数据库中,并为他们单击按钮的产品提供积分。
  2. 如果它们已经存在于数据库中,则使用该产品,而不是向数据库中插入新条目,而是应该通过添加到现有值来更新它们的点。

这是我到目前为止所拥有的,但它似乎不起作用(在某个时间点,它会插入,但不会更新,现在似乎两者都没有)

//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 . "'"; 

对此的任何帮助将不胜感激。

我也完全有可能采取了错误的方法来解决这个问题,但是经过几天的搜索,对我的情况的每一次推断都带有强烈的建议,即使用重复键功能。

预先感谢您的任何帮助。

4

2 回答 2

0

最好重新考虑一下“这些东西应该如何工作”

  1. 首先,当用户单击按钮时,您必须检查该用户是否存在
  2. 如果存在,则更新您插入的点。

您必须构建 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 (...)";
}
于 2013-06-17T18:20:26.457 回答
0

您稍微过度考虑了INSERT INTO ... ON DUPLICATE KEY- 语法。

看看手册,你会发现这个基本的例子:

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 代码中)。

您还可以根据应用程序的需要将其分解为多个任务。

于 2013-06-17T18:24:09.600 回答