[英]How to merge two sql queries and get output?
我正在扩展How to use Inner Joins with where 子句? 问题,因为我需要对此查询结果进行一些扩展。
在这里,我制作了一个 php 脚本,如下所示。 这是因为一个表位于另一台服务器中,并且不在同一本地主机中。 所以我创建了两个不同的 sql 查询
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "project1";
$servername2 = "112.76.456.89";
$username2 = "user";
$password2 = "user990";
$dbname2= "project2";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// Create connection
$conn2 = mysqli_connect($servername2, $username2, $password2, $dbname2);
// Check connection
if (!$conn2) {
die("Connection failed: " . mysqli_connect_error());
}
$sql1 = "SELECT t2.UserID,
t1.Username,
t2.TotalAmountResetDate,
t2.TotalAmount,
sum(COALESCE(Totalnvested,0)) Totalnvested
FROM userdetails1.UserTable t1
INNER JOIN userdetails2.AmountTable t2
ON t1.UserID = t2.UserID
LEFT JOIN userdetails2.TotalInvestmentsTable investment
ON t1.Username = investment.Username AND
investment.total_invested_date BETWEEN '2022-01-31' and '2022-02-12'
WHERE t2.TotalAmountResetDate='2022-01-31' ";
$sql2="SELECT Username,sum(TotalExpenses) from TotalExpensesTable where date_of_expense_date between '2022-01-31' and '2022-02-12'
group by Username";
$result1 = mysqli_query($conn, $sql);
$result2 = mysqli_query($conn2, $sql2);
mysqli_close($conn);
mysqli_close($conn2);
?>
从每个 sql 查询中,我可以得到 output,如下所示。
查询1;
UserId Username TotalAmountResetDate TotalAmount Totalnvested
1 John 1/31/2022 -12 45000
2 Micheal 1/31/2022 345 45000
3 Ann 1/31/2022 213 45000
4 Shasha 1/31/2022 0 0
5 mike 1/31/2022 0 0
查询 2:
Username TotalExpenses
John 2543
Micheal 2345
Ann 3290
现在我需要将这两个组合起来得到 output,如下所示,
UserId Username TotalAmountResetDate TotalAmount Totalnvested TotalExpenses TotalBalance
1 John 1/31/2022 -12 45000 2543 42445
2 Micheal 1/31/2022 345 45000 2345 43000
3 Ann 1/31/2022 213 45000 3290 41923
4 Shasha 1/31/2022 0 0 0 0
5 mike 1/31/2022 0 0 0 0
有人可以告诉我如何使用上述两个查询的合并来获得这种 output 吗? 我需要使用foreach
循环吗?
我需要获取 UserId、Username、TotalAmountResetDate、TotalAmount、Totalnvested、TotalExpenses、TotalBalance 然后我可以使用 HTML 表来显示它。
使用hashMap
合并两个数据集的示例。
<?php
$result1 = mysqli_query($conn, $sql);
$result2 = mysqli_query($conn2, $sql2);
$res1 = mysqli_fetch_all($result1, MYSQLI_ASSOC);
$res2 = mysqli_fetch_all($result2, MYSQLI_ASSOC);
$hashMapRes2 = array_reduce($res2, function ($carry, $item) {
$username = $item['Username'];
if (!isset($carry[$username])) {
$carry[$username] = $item;
}
return $carry;
}, []);
$output = array_map(function ($item) use ($hashMapRes2) {
$username = $item['Username'];
if (isset($hashMapRes2[$username])) {
$item['TotalExpenses'] = $hashMapRes2[$username]['TotalExpenses'];
} else {
$item['TotalExpenses'] = 0;
}
return $item;
}, $res1);
print_r($output);
Output:
Array
(
[0] => Array
(
[UserId] => 1
[Username] => John
[TotalAmountResetDate ] => 1/31/2022
[TotalAmount] => -12
[Totalnvested] => 3055
[TotalExpenses] => 11
)
[1] => Array
(
[UserId] => 1
[Username] => Micheal
[TotalAmountResetDate ] => 1/31/2022
[TotalAmount] => 50
[Totalnvested] => 3055
[TotalExpenses] => 12
)
[2] => Array
(
[UserId] => 1
[Username] => Shasha
[TotalAmountResetDate ] => 1/31/2022
[TotalAmount] => -12
[Totalnvested] => 3055
[TotalExpenses] => 0
)
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.