php - 在 php 页面上显示 SQL 内连接表的结果

标签 php mysql database

所以我的数据库中有两个表:

1

用户:

userID 用户类型 用户名

2

门票:

ticketID userID TicketMessage

我的目标是用 php 回显 USER 表中的用户名,其中票证中的 USERID = 与 USER 表中的用户 ID 相同。

这是迄今为止我的代码:

<?PHP
    if ($result['admin'] == 1) { 

        $sql = "SELECT * FROM ticket ORDER BY ticketDateTime DESC";
                $res = do_sql($sql);

                if ($res->rowCount() == 0) {
                echo "You have 0 Tickets, you haven't created any tickets!";

                } else {
                ?>
        <table class="table-container">
                    <thead>
                        <tr>
                            <th id="table-subject">Subject</th>
                            <th>Id</th>
                            <th>Created</th>
                            <th>User</th>
                            <th>Status</th>
                        </tr>
                    </thead>
                    <tbody>
                <?php
                while ($row = $res->fetch(PDO::FETCH_ASSOC)) {

                ?>
                        <tr>
                            <td>
                            <a id="ticket-subject" href="single-ticket-view.php?page=singletickview&ticketID=<?php echo $row['ticketID'];?>">
                            <?php
                            echo $row['ticketSubject'];?>
                            </a>
                            </td>
                            <td><?php 
                            echo sprintf('%04d', $row['ticketID']); ?>
                            </td>

                            <td><?php
                            $a_date = strtotime($row['ticketDateTime']);
                            $formatted_date = date( 'd/m/Y', $a_date );
                            echo $formatted_date; ?>
                            </td>

                            <td>
                            <?php
$sql2 = "SELECT users.username FROM users INNER JOIN ticket ON users.userID = '" . $row['userID'] . "'";
$res2 = do_sql($sql2);
    if ($res2->rowCount() == 1) {
        echo $res2['username'];
    }
                                ?>

                            </td>

                            <td>
                            <?php if ($row['is_active'] == 1)  {?>
                                <div class="status" id="open">Open</div>
                            <?php } else { ?>
                                <div class="status" id='closed'>Closed</div> <?php } ?>
                            </td>
                        </tr>
                    </tbody>
                <?php
                }}?>
            </table>

我的问题是我不知道如何在第 60 行回显用户名,我认为这与我的 SQL 查询有关。这是我的 SQL 查询和 php 代码,来自上面代码部分的第 60 行 - 问题 100% 位于此部分,可能与查询和使用 INNER JOIN 的不正确方式有关。又来了:

                                <td>
<?php
$sql2 = "SELECT users.username FROM users INNER JOIN ticket ON users.userID = '" . $row['userID'] . "'";
$res2 = do_sql($sql2);
    if ($res2->rowCount() == 1) {
        echo $res2['username'];
    }
?>

                            </td>

$row['userID'] = 表 Ticket 中的用户 ID,在此实例中恰好为 11。我转到我的管理员的 PHP 中运行 SQL 查询并运行查询:

SELECT users.username FROM users INNER JOIN ticket ON users.userID = 11

它返回了我正在寻找的正确结果,所以我不知道为什么它不会在我的 PHP 网页上回显。任何帮助都会很棒,谢谢!

编辑:

我忘记显示我的 do_sql();函数,这里是:

function do_sql($sql_string) {
$connection = new PDO("mysql:host=localhost;dbname=secret", 'root', '');
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try {
    $row_result = $connection->query($sql_string);
} catch (PDOException $Exception) {
    echo $sql_string . '</br>';
    echo $Exception;
    exit();
}

return $row_result;

}

最佳答案

您可以加入查询并通过单个查询执行获取用户名,而不是多次调用查询。 更改此行

 $sql = "SELECT * FROM ticket ORDER BY ticketDateTime DESC";

$sql = "SELECT ticket.*,Users.username FROM ticket LEFT JOIN Users ON ticket.userID = Users.userID ORDER BY ticketDateTime DESC";

可以通过$row['username']获取用户名;循环中

关于php - 在 php 页面上显示 SQL 内连接表的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45518176/

相关文章:

php/mysql - 按日期排序

jquery - 我的 SQL 查询显示用户评论中最有用的评论

mysql - 定期从远程数据库拉取数据到本地

php - MySQL 表结构的拇指 UP 和 DOWN 评论系统?

javascript - 当重新加载包含 mysql 数据的表的页面时,它应该转到表的特定部分

php - 递归菜单树函数

PHP MySQL ORDER BY level DESC LIMIT 1 不适用于所有搜索

mysql - 错误 1215 : cannot add foreign key contraint

php - 标记 <? PHP 中的错误行为

PHP/mySQL---选择存在另一个值的最大值