(问题已更新) 仍然是新的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 |
感谢上次帮助,但我的代码仍无效。所以我决定发布我的整个代码。 我的代码有什么问题? 非常感谢
答案 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是一个会话变量。我已经放了一些东西来清理价值,因为你将使用几次次查询。
希望这可以帮到你