我正在制作排行榜。要获取所有信息,我需要选择多个表,因为它必须在同一个while语句中。
我正在使用此代码:
$result = mysqli_query($con, "SELECT *, @rn := @rn + 1 as Rank
FROM Leaderboard_Tag, Player_Data WHERE Player_Data.UUID=Leaderboard_Tag.UUID, (SELECT @rn := 0 ) r
ORDER BY Wins,Got_Tagged DESC LIMIT 0,10");
这就是为了表明:
$rank = 1;
if ($result->num_rows > 0) {
while ($row = mysqli_fetch_assoc($result)) {
$Username=$row['Leaderboard_Tag.Username'];
$Tokens = $row['Player_Data.Tokens'];
$Wins=$row['Leaderboard_Tag.Wins'];
$Got_Tagged = $row['Leaderboard_Tag.Got_Tagged'];
echo "<tr>
<td class=\"rank\">$rank</td>
<td><div class=\"row\">
<div class=\"td-avatar\">
<img class=\"avatar-small\" src=\"http://website.craftshark.net/avatar/avatar/$Username/40\">
</div>
<div class=\"td-user\">
<a class=\"lb-username\" href=\"../player/$Username\">$Username</a>
<br>
<small class=\"lb-desc\"><i class=\"fa fa-star tokens-small\"></i> $Tokens</small>
</div>
</div></td>
<td class=\"got_tagged\">$Got_Tagged</td>
<td class=\"wins\">$Wins</td>
</tr>";
$rank++;
}
}
由于某种原因,它不会返回表中的任何内容。 http://puu.sh/8KJko.png
但它确实在第92行返回错误:
if ($result->num_rows > 0) {
正如我所说,我在同一个数据库中有2个表。 Player_Data和Leaderboard_Tag。每个用户都有自己的唯一ID。在两个表格中都是一样的。
有什么问题?它之前有效,没有使用此代码选择多个表:
$result = mysqli_query($con, "SELECT Username,Wins,Got_Tagged,@rn := @rn + 1 as Rank
FROM Leaderboard_Tag, (SELECT @rn := 0 ) r
ORDER BY Wins,Got_Tagged DESC LIMIT 0,10");
答案 0 :(得分:0)
似乎你的WHERE语句格式不正确:
... WHERE Player_Data.UUID = Leaderboard_Tag.UUID,(SELECT @rn:=&gt; 0)r
我认为它应该是这样的,除非子查询被错放并且属于FROM部分。
... WHERE Player_Data.UUID = Leaderboard_Tag.UUID AND @rn&gt; 0
话虽这么说,使用这样的变量(在同一语句中进行操作和比较)可能会根据MySQL文档给出意想不到的结果。