mysql - 如何更新最终关联记录

标签 mysql

我有属于 ordersitems 列表。每个 item 都有 fee_percentage 字段。 items 的总和是orders 表中的total_price

我想达到什么目的? 我想更新最后关联项目的 fee 字段。

_________________________      __________________________________________
| order ID | total_price|      | id | order_id | fee_percentage |  fee  |
-------------------------      ------------------------------------------
|   334    |     425    |      |  1 |   334    |      50        |  212  |
  # The `fee` should be 213 => |  2 |   334    |      50        |  212  | 

如您所见,items 的总和将为 424。我想将剩余的费用添加到最后一项 fee。 (所以item id 2的费用应该是213)。

有什么帮助吗?

这是我目前写的

UPDATE items AS i
LEFT JOIN orders AS o ON o.order_id = b.order_id
LEFT JOIN (
    SELECT order_id, SUM(fee) AS sum_fee
    FROM items 
    GROUP BY order_id
    WHERE deleted = 0
) AS b1 ON b1.order_id = b.order_id
SET b.fee = b.fee + (o.total_price - b1.sum_fee)
WHERE b.deleted = 0;

我尝试将其附加到之前的查询或更新订单记录中的 last_item_id,但它不起作用。

LEFT JOIN (
    SELECT order_id, MAX(id) AS b_last_item_id
    FROM items 
    WHERE deleted = 0
    GROUP BY order_id    
) AS b1 ON b1.order_id = b.order_id

最佳答案

这有点棘手。我认为以下查询应该有效:

UPDATE items AS i
JOIN orders AS o ON i.order_id = o.orderID
JOIN (
   SELECT order_id, SUM(fee) AS sum_of_fees
   FROM items
   GROUP BY order_id
) AS i2 ON i2.order_id = o.orderID  
LEFT JOIN items AS i3 
   ON i3.order_id = o.orderID AND i3.id > i.id
SET i.fee = o.total_price - (sum_of_fees - i.fee)
WHERE i3.id IS NULL;

使用的派生表计算每个 order_id 的费用总和。使用这个值,我们可以计算除当前项目之外的所有项目的总和:

SUM(fee) - i.fee

items 表需要一个额外的 LEFT JOIN 来识别具有最大 id 值的记录,即实际上正在更新。

关于mysql - 如何更新最终关联记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41699379/

相关文章:

php - 在 MySql/PHP/CodeIgniter 上负载平衡多读数据库

javascript - 打印从数据库检索的数据作为 node.js 中的响应

mysql - 如何在mysql中使用联邦服务器实现数据集成?

java - 返回结果集的正确方法

mysql - 如果第一个查询没有生成结果,如何在 mysql 上运行两个查询

mysql - 使用连字符/破折号进行 MariaDB 全文搜索

javascript - 以 JSON 格式返回 Mysql SQL 结果

php - 尝试将数据插入 blob 时发生 PDO 异常

c# - 缓冲 MySQL 远程访问

java - 使用java删除mysql中表中的所有记录