(问题已更新)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是一个会话变量。我放了一些东西来处理清除值,以防您将使用查询多次。
希望这能帮助你