繁体   English   中英

在php页面上显示SQL内部联接表的结果

[英]Displaying a result from SQL inner join table on php page

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

1

用户:

userID usertype用户名

2

票:

ticketID userID ticketMessage

我的目标是用php回显来自USER表的用户名,其中来自ticket的USERID =与USER表中的USERID相同的USERID。

到目前为止,这是我的代码:

<?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查询和代码上面的第60行的PHP代码 - 问题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'] =来自表票证的userID,在这个例子中恰好是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']获取用户名; 在循环中

如果您只是在初始查询中执行连接,那么您将可以访问所需的所有字段,而无需运行第二个查询。

SELECT * FROM ticket INNER JOIN users ON users.userID = ticket.userID ORDER BY ticketDateTime DESC

应该是SELECT users.username FROM users INNER JOIN ticket ON users.userID = ticket.USERID希望它SELECT users.username FROM users INNER JOIN ticket ON users.userID = ticket.USERID帮助,如果您选择特定记录,请在查询中添加WHERE子句

您只需要一个SQL查询即可获得所需的所有数据。

SELECT Ticket.*, User.username FROM Ticket INNER JOIN User ON User.userid = Ticket.userID;

这将选择所有票证数据以及票证所属的用户的用户名。 用法示例:

echo $data['username'] . ' has a ticket with the following message: ' . $data['ticketMessage'];  

将来,我建议您为列名添加前缀,以防止与这些查询混淆。 (例如user_name,user_id,ticket_message,ticket_id)。

您可以在此处阅读有关INNER JOIN的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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