php - Mysql 仅在之前插入行时更新
问题描述
如果行存在(并且已插入),我只想运行更新查询。我尝试了几种不同的方法,但这可能是我如何循环的问题。插入工作正常并创建记录和更新应该采用现有值并每次添加它(10 存在 + 15 添加,25 存在 + 15 添加,40 存在......我在循环中尝试了这个但它运行了列表中的每个项目,每次都是一个巨大的数字。每次单击链接时页面都会运行,因此用户退出并返回
while($store = $SQL->fetch_array($res_sh))
{
$pm_row = $SQL->query("SELECT * FROM `wishlist` WHERE shopping_id='".$store['id']."'");
$myprice = $store['shprice'];
$sql1 = "insert into posted (uid,price) Select '$uid','$myprice'
FROM posted WHERE NOT EXISTS (select * from `posted` WHERE `uid` = '$namearray[id]') LIMIT 1";
$query = mysqli_query($connection,$sql1);
}
$sql2 = "UPDATE posted SET `price` = price + '$myprice', WHERE shopping_id='".$_GET['id']."'";
$query = mysqli_query($connection,$sql2);
解决方案
利用mysqli_affected_rows
插入查询,验证它是否成功插入,您可以为更新查询创建条件。
但是,如果您在插入后立即运行更新,则会导致人们相信它可以同时完成。在这种情况下,在没有上下文的情况下,您可以$myprice
在插入之前乘以 2 - 您可以查看是否可以避免这样做。
此外,但稍微复杂一些,您可以为此使用SQL 事务,并确保您准确地引用了您想要更新的行。如果插入失败,您的更新将不会发生。
当然,如果您为更新完美地引用了插入的行,那么无论如何更新都不会发生。例如,在这些行上有一个主自增键,mysqli_insert_id
用于获取最后插入的 ID,并使用该 ID 更新行。但是这种方法可能会在大容量系统或随机竞争事件中中断,这会导致我们直接回到单个查询或事务利用率。
推荐阅读
- python - plotly express sunburst 情节完全空白
- python - Python中的番茄钟定时器
- python - Python 的新 functools.cached_property 错误或限制?
- python - + 不支持的操作数类型:“int”和“Entry”
- javascript - 从 Empty 集合中获取查询快照文档长度
- google-chrome - 如何将 PayPal 智能按钮添加到 Chrome 扩展程序?
- ruby-on-rails - Rails - 如何实例化具有辅助关联的模型?对于实例化记录,是否有 << 运算符的替代方法?
- api - Decentralized API calls using multiple Chainlink oracles in solidity
- kubernetes - 从 Ansible playbook 运行 k8s_exec 会导致握手状态 403 Forbidden 错误
- php - 无法访问子目录网址