我想减去两个不同表的2列

时间:2019-03-30 18:21:53

标签: php mysql sql

tbl_blood:

id|qty
1  14
2  15
3  16

tbl_blood_list:

id|blood_quantity
1  1
2  1
3  1

我的问题是tbl_blood表的列数量应减去tbl_blood_list的表中的blood_quantity列。我需要可以在php mysqli中实现的代码。

我已经尝试过此代码,但它确实无法工作:

$add_inv = "UPDATE tbl_blood
SET qty=(qty - '$blood_quantity')
WHERE id='$minus_blood_id' ";

2 个答案:

答案 0 :(得分:0)

有更有效的方法来处理这种情况,您应该为程序/表考虑不同的结构,为什么当直接减少tbl_blood时有两个单独的表。

在您当前的结构下,以下代码适用:

<?php

$pdo = new PDO('mysql:host=localhost;dbname=blood', 'user', 'password');

/* Retrieve values to update */
$result = $pdo->query('
SELECT tb.id, (tb.qty - tbl.blood_quantity) n
FROM tbl_blood tb
LEFT JOIN tbl_blood_list tbl ON (tbl.id = tb.id)');

/* Update */
foreach ($result as $row)
    $pdo->query('UPDATE tbl_blood SET qty = '.(int)$row['n'].' WHERE id = '.(int)$row['id'].' LIMIT 1');

?>

结果:

tbl_blood

id|qty
1  13
2  14
3  15

也:

  • 您可以考虑统一字段名称(例如,“ blood_qty”而不是“ blood_quantity”)
  • 确保“ qty”和“ blood_quantity”字段为无符号整数
  • 还要确保两个“ id”字段都是主键
  • 您可以在两个表中都添加一个时间戳记字段以跟踪更新

答案 1 :(得分:0)

如果我不误解您的问题,所以您想更新联接,但是在表结构中,如果两个表中都有任何共同的列,我将找不到任何公共列,因此您可以在一个表中联接和更新表如果是的话,我认为ID在两个表中都是通用的,请尝试

$pdo->query("UPDATE tbl_blood AS tb JOIN tbl_blood_list AS tbl ON (tbl.id = tb.id) SET tb.qty = (tb.qty - tbl.blood_quantity)")

请让我知道是否有任何问题或我误判了您的问题

希望对您有帮助。