如何在同一个 mysql 记录中插入和更新一个数字? [复制]

Posted

技术标签:

【中文标题】如何在同一个 mysql 记录中插入和更新一个数字? [复制]【英文标题】:How can I insert and update a number within the same mysql record? [duplicate] 【发布时间】:2019-07-10 16:13:39 【问题描述】:

您好,感谢您抽出宝贵时间阅读这篇文章

我有一个客户数据库,并且一直在尝试添加一个忠诚度积分系统,以便总订单 x 价值 = 总忠诚度积分

我让它工作,以便在收到订单时用积分更新 table_loyalty 并且工作正常

$points = $row["price"] * 1000;

$insert = mysql_db_query($db, "INSERT into table_loyalty (username, orderno, points) VALUES ('$username', '$this_orderno', '$points')", $connection);
check_mysql($insert); 

但是,我最希望能够做但似乎无法让它发挥作用(尝试了几种不同的方法)是有一个运行总计,以便每个额外的订单建立 $points 而不是添加单独的记录

我不是编码员,我确信这是显而易见的,但希望能提供任何帮助。

我试过了,但没用:

$points = $row["points"];

$newpoints = $row["price"] * 1000;

$update = mysql_db_query($db, "update table_loyalty set points='$points'+'$newpoints' WHERE username='$username'", $connection);
check_mysql($update);

 else 

$insert = mysql_db_query($db, "INSERT into table_loyalty (username, orderno, points) VALUES ('$username', '$this_orderno', '$newpoints')", $connection);
check_mysql($insert);

【问题讨论】:

最好单独记录每个订单的积分并合计,因为任何订单都可以修改、取消、全部或部分退货。 @Shadow - 好点.... 请将您的代码包装在代码块中。示例:<mycode/> 【参考方案1】:

我想我会做一个选择来检查是否已经有给定用户名的记录。如果有,获取它的分数,然后执行更新,将额外的分数添加到其检索到的总数中。如果没有记录,请插入。我很想写 php 和查询,但我只是在我的手机 atm 上。希望这有助于稍后检查

(更新)嗨,马克,除了您可能希望将它们分开的事实之外,因为订单可能会被取消或发生其他事情(这可能是有效点,具体取决于您的系统有多大。让我们检查如何使请求的功能正常工作。

请注意 mysql_db_query 自 PHP 5.3 以来已被弃用,并已从 PHP 7.0.0 中完全删除。因此,如果您希望能够长期完成这项工作,我建议您使用http://php.net/manual/en/book.mysqli.php

我的建议如下:

$selectQuery = "SELECT points FROM table_loyalty WHERE username=" . $username . ";"

$selectResult = mysql_db_query($db, $selectQuery, $connection);

// if no results could be found
if (mysql_num_rows($selectResult) == 0) 
  //Presuming this is the order price?
  $newpoints = $row["price"] * 1000;

  $insertQuery = "INSERT into table_loyalty (username, orderno, points) VALUES ('$username', '$this_orderno', '$newpoints')";
  $insertResult = mysql_db_query($db, $insertQuery, $connection);
  // I personally have no idea what the check_mysql() function does, I presume its a function of you own making? With that I'm making the assumption that it handles the result in some way? 
  check_mysql($insertResult);

//results have been found
 else 
  $existingPoints = 0;
  while ($row = mysql_fetch_assoc($result)) 
    //There is a catch here. If used in this way you need to make sure that every username only has 1 entry in the table_loyalty. So updating only 1 row per user also means you can ONLY have 1 record per user.
    $existingPoints = $row["points"];
  

  $newPoints = $row["price"] * 1000;
  $totalPoints = $existingPoints + $newPoints;
  $updateQuery = "update table_loyalty set points='$totalPoints' WHERE username='$username'";

  $update = mysql_db_query($db,updateQuery , $connection);
  check_mysql($update);

这是你可以使用的东西吗?这不是最优雅的解决方案,但在基本情况下,这可能是您想要的:)。

【讨论】:

谢谢(我已经用我尝试过的代码更新了我的帖子) 更新了我的答案,希望对您有所帮助

以上是关于如何在同一个 mysql 记录中插入和更新一个数字? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP 在 MYSQL 中的数据库表中插入、更新、删除记录时创建日志

我可以从集群中的多个 mysql 服务器更新、插入和删除记录吗

将MYSQL某一数据库中的多条记录批量插入到另一MYSQL数据库时,记录不存在则插入,存在则更新

如何使用 jquery 将记录更新到 mysql 数据库中?

如果 mysql 数据库中的表中不存在,则更新或插入多条记录

mysql笔记(10)-数据的插入和更新(insert/update/case)