如何使用面向对象的方法从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个不同的用户,如左图所示,但我却获得了正确的图像。
最佳答案
您在不同的表中使用了相同的列名,因此默认情况下联接冲突。这就是为什么必须使用别名的原因,例如:
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_stats
到users
的外键(引用)。我的意思是将users.id与rp_stats.id进行比较是不正确的。使用这种结构,用户始终可以拥有最大。 1个数据。您可以为使用user_id
列的用户生成更多灵活性,该列引用了user表。关于php - 如何从两个表中获取结果? (MySQLi),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35015560/