如何从两个表中获取结果? (库MySQLi)

时间:2016-01-26 13:59:45

标签: php mysql mysqli

如何使用面向对象的方式从MySQLi中的两个表中检索结果?

我正在尝试从$ stmt获取$ stmt2的用户信息。 $ stmt加载完美,但$ stmt2没有,因为它没有得到结果。

以下是代码:

<?php

            if ($stmt = $conn->prepare('SELECT `id`, `kills` FROM `rp_stats` ORDER BY `kills` DESC LIMIT 6'))
            {
                $stmt->execute();
                $stmt->bind_result($id, $kills);

                while($stmt->fetch())
                {
                    if ($stmt2 = $conn->prepare("SELECT `id`, `username`, `look`, `online` FROM `users` WHERE `id` = ?"))
                    {
                    $stmt2->bind_param("i", $id);
                    $stmt2->execute();
                    $stmt2->bind_result($id, $username, $look, $online);
                    $user = $stmt2->get_result();
                    }

                    global $stmt2;

                    echo '<div class="leaderboardWrap">
                    <div class="userAvatar" style="float: left;width: 50px;display: inline-block;height: 50px;background-image: url(\'https://www.habbo.nl/habbo-imaging/avatarimage?figure='. $look . '&size=m&headonly=1\');"></div>
                    <div class="leaderboardContainer">
                    <p style="padding-top: 6px;"><span class="username-rainbow"><a ng-click="progress()" href="/user/' . $username . '">' . $username . '</a></span></p>
                    <p style="margin-top: -9px;"><i>$' . formatWithSuffix($credits) . ' cash</i></p>
                    </div>
                    </div>';
                }

                $stmt->close();
            }
        ?>

我希望它根据用户统计信息显示6个不同的用户,如左图所示,但我得到了正确的图像。

Wanted result current result

3 个答案:

答案 0 :(得分:2)

尝试在数据库中使用inner join来最小化数据的获取过程:

SELECT `id`, `kills` FROM `rp_stats` 
INNER JOIN users ON rp_stats.id = user.id 
ORDER BY `kills` DESC LIMIT 6

答案 1 :(得分:1)

您在不同的表中使用相同的列名,因此默认情况下连接会发生冲突。这就是你必须使用别名的原因:

SELECT s.id, s.kills, u.username
FROM rp_stats s
INNER JOIN users u ON s.user_id = u.id
ORDER BY s.kills DESC LIMIT 6

注意!我使用user_id。这是从rp_statsusers的外键(引用)。我的意思是将users.id与rp_stats.id进行比较是不正确的。使用这种结构,用户总是可以拥有最大值。 1个统计您可以更灵活地使用user_id列来引用用户表。

答案 2 :(得分:0)

"SELECT RS.`id`, RS.`kills`, US.`id`, US.`username`, US.`look`, US.`online` FROM rp_stats RS, users US WHERE US.`id`=RS.`id` ORDER BY RS.`kills` DESC LIMIT 6";

规范化查询可以提供帮助。