从两个不同的表中减去值,然后将结果插入另一个表中


subtracting value from 2 different table then insert the result to another table

(问题已更新)php还是个新手。

我在这里有"用户"表(对不起,我更改了一些列名)

| idn | name | balance | 
  12    matt     500

和表"交易"

| id | store_id | balance | 
  12      1          100
  12      1           50
  12      1           50

到目前为止,这就是我所做的(不工作)

 <?php 
 $page_title = 'Student Transaction Log';
 include ('includes/header.html');
 echo "<br><h2>Welcome {$_COOKIE['first_name']}</h2>";
 require_once ('mysqli_connect.php');
 $q = "SELECT s.idn, s.balance - 
  COALESCE(
  SELECT SUM(t.balance) FROM transactions t 
  WHERE t.id = s.idn AND t.store_id = 1)
  ,0)
  AS result FROM users s
  WHERE s.idn = {$_COOKIE['idno']} ";   
  $r = @mysqli_query ($dbc, $q);
  if (mysqli_num_rows($r) == 1) {
  echo '
  <p>Balance: ' . $row['result'] . ' </p>'; 
   }
   mysqli_close($dbc);
   ?>

我该怎么做或该怎么做才能从"余额"(users)中减去"结果",并将结果与student_id一起插入到这个表的"结果"(好吧,我还没有在我的代码中包括插入语句)

表"结果"

| student_id | new balance |

感谢大家上次的帮助,但我的代码仍然无法工作。所以我决定发布我的全部代码。我的代码出了什么问题?非常感谢

试试这个:

INSERT INTO result
SELECT s.student_id, s.balance_1 - 
    COALESCE(
        (SELECT SUM(t.balance2) FROM transactions t
        WHERE t.student_id = s.student_id
        AND t.store_id = 1)
   ,0)
FROM users s
WHERE s.student_id = 12

这样,如果事务表中没有行,则只有balance_1

你可以试试这个伴侣:

DELIMITER //  
START TRANSACTION;
  SET @balance1 = 0, @bal_total = 0, @student_id = <insert_studentID_here>,  
    @store_id = <insert_storeID_here>;  
  SELECT SUM(balance) INTO @bal_total FROM transactions  
  WHERE student_id = @studentID AND store_id = @storeID;  
  SELECT balance INTO @balance FROM users  
  WHERE student_id = @studentID;  
  INSERT INTO result (student_id, balance)  
  VALUES (@student_id, @balance1 - @bal_total);
COMMIT;  
DELIMITER ;

使用MySQL事务将使进程满足ACID结构中的"A"
链接:MySQL文档-ACID

"A"表示原子性,通过使用事务,您将使其成功运行回滚,并且不做任何更改。

您还可以使用以下命令将此Transaction查询转换为php查询:php Transaction

此外,@variable_name是一个会话变量。我放了一些东西来处理清除值,以防您将使用查询多次

希望这能帮助你

相关文章: