繁体   English   中英

如何合并两个 sql 查询并得到 output?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM