根据 INNER JOIN 中的 SESSION 值显示两个不同的值

Showing two different values depending on SESSION value in INNER JOIN

我有两个不同的 tables,一个命名用户,另一个命名交易。 Transactions 包含 wallet1、wallet2、amount。用户包含用户详细信息,例如名字、姓氏和钱包。我正在尝试显示相应的名字和姓氏,具体取决于 SESSION_wallet 是否等于交易中的 wallet1 或 wallet2。我尝试搜索了一段时间,并想出了一个解决方案,用于显示进行转移的名字和姓氏的正确显示名称,但是,我试图让它显示 "Transfer to:"[=13 的正确值=]

这是我的一些代码,可以更好地理解我的意思:

MySQLi 查询:

$result2 = mysqli_query($link, "SELECT * FROM transactions INNER JOIN users ON transactions.wallet1 = users.wallet WHERE transactions.wallet1 = '" . $_SESSION["wallet"] . "' OR transactions.wallet2 =  '" . $_SESSION["wallet"] . "' Order by transactions.id DESC LIMIT 5 ");

PHP代码:

<?php  
if(mysqli_num_rows($result2) > 0)  
{  
    while($row = mysqli_fetch_array($result2))  
    {  
    ?>  

需要显示转​​自,转入的table:

<?php
if ($_SESSION["wallet"] == $row["wallet1"]) {
    echo "<td>Transfer to ".$row["firstname"]." ".$row["lastname"]."</td>";
}
else if ($_SESSION["wallet"] == $row["wallet2"]) { 
    echo "<td>Transfer from ".$row["firstname"]." ".$row["lastname"]."</td>";
}
?>

现在我的 tables 只显示进行转账的用户的名字和姓氏,但是,我需要它来显示进行交易的用户的名字和姓氏也一样。 else if 代码运行正确,但第一部分没有显示相应的值。

您将需要 JOIN 您的 transactions table 到您的 users table 两次,一次获取每个用户名。然后为避免重复的列名覆盖输出数组中的结果,您将需要使用列别名。这样的事情应该有效:

$result2 = mysqli_query($link, "SELECT t.*, 
                                u1.firstname AS w1_firstname,
                                u1.lastname AS w1_lastname,
                                u2.firstname AS w2_firstname,
                                u2.lastname AS w2_lastname
                                FROM transactions t
                                INNER JOIN users u1 ON t.wallet1 = u1.wallet
                                INNER JOIN users u2 ON t.wallet2 = u2.wallet
                                WHERE t.wallet1 = '{$_SESSION["wallet"]}'
                                   OR t.wallet2 = '{$_SESSION["wallet"]}'
                                ORDER BY t.id DESC 
                                LIMIT 5 ");

然后你可以访问每个用户的名字如$row['w1_firstname']等:

if ($_SESSION["wallet"] == $row["wallet1"]) {
    echo "<td>Transfer to ".$row["w2_firstname"]." ".$row["w2_lastname"]."</td>";
}
else if ($_SESSION["wallet"] == $row["wallet2"]) { 
    echo "<td>Transfer from ".$row["w1_firstname"]." ".$row["w1_lastname"]."</td>";
}

请注意,理想情况下,您应该为此使用准备好的查询,例如:

$stmt = $link->prepare("SELECT t.*, 
                        u1.firstname AS w1_firstname,
                        u1.lastname AS w1_lastname,
                        u2.firstname AS w2_firstname,
                        u2.lastname AS w2_lastname
                        FROM transactions t
                        INNER JOIN users u1 ON t.wallet1 = u1.wallet
                        INNER JOIN users u2 ON t.wallet2 = u2.wallet
                        WHERE t.wallet1 = ? 
                           OR t.wallet2 = ?
                        ORDER BY t.id DESC 
                        LIMIT 5");
$stmt->bind_param('ss', $_SESSION["wallet"], $_SESSION["wallet"]);
$stmt->execute();
$result2 = $stmt->get_result();