根据 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();
我有两个不同的 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();