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

时间:2015-02-26 13:36:39

标签: php mysql sql

(问题已更新) 仍然是新的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);

   ?>

我怎样才能或我该如何从'余额'(用户)中减去'结果'并将结果与​​student_id一起插入 到这个表'结果'(我还没有在我的代码中包含插入语句)

表'结果'

| student_id | new balance |

感谢上次帮助,但我的代码仍无效。所以我决定发布我的整个代码。 我的代码有什么问题? 非常感谢

2 个答案:

答案 0 :(得分:2)

试试这个:

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

答案 1 :(得分:2)

你可以尝试这个伴侣:

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 Documentation - ACID

“A”表示原子性,通过使用交易,您可以成功运行回滚,并且不做任何更改。

您还可以使用以下代码将此事务查询转换为php:PHP Transaction

此外,@ variable_name是一个会话变量。我已经放了一些东西来清理价值,因为你将使用几次次查询。

希望这可以帮到你