Отображение двух разных значений в зависимости от значения SESSION в INNER JOIN - PullRequest
0 голосов
/ 22 марта 2020

У меня есть две разные таблицы, одна с именем пользователя, а другая с именем транзакции. Транзакции содержат кошелек1, кошелек2, сумму. Пользователи содержат данные пользователя, такие как имя, фамилия и кошелек. Я пытаюсь отобразить соответствующее имя и фамилию, в зависимости от того, равен или нет SESSION_wallet Wallet1 или Wallet2 в транзакциях. Я попытался поискать некоторое время и нашел решение для отображения правильного отображаемого имени для имени и фамилии, осуществляющих передачу, однако я пытаюсь заставить его отображать правильное значение для «Transfer to:»

Вот мой код, чтобы лучше понять, что я имею в виду:

MySQLi Query:

$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))  
    {  
    ?>  

Таблица, которая должна отображать передачу из и передавать в:

<?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>";
}
?>

В настоящее время в моих таблицах отображаются только имя и фамилия пользователя, который произвел передачу, однако мне нужно это отобразить имя и фамилию пользователя, которому также была сделана транзакция. Иначе, если код работает правильно, но первая часть не показывает соответствующее значение.

1 Ответ

1 голос
/ 22 марта 2020

Вам потребуется JOIN ваша transactions таблица к вашей users таблице дважды, один раз, чтобы получить имя каждого пользователя. Затем, чтобы избежать дублирования имен столбцов при перезаписи результатов в выходном массиве, вам нужно будет использовать псевдонимы столбцов. Примерно так должно работать:

$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'] et c.:

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...