我需要帮助才能在我的网站上显示在线球员的名字。
我已经完成了所有的工作,但当我选择排名0(会员)时,你会看到1000名玩家在线/离线。
我希望它只显示球员(在线)和隐藏球员(离线),我希望你明白我的意思
我的代码:
<?php
$findAdmins = $odb->query("SELECT * FROM `users` WHERE `rank` = '1'");
while($rowAdmins = $findAdmins->fetch(PDO::FETCH_BOTH)) {
$diffOnline = time() - $rowAdmins['activity'];
$countOnline = $odb->prepare("SELECT COUNT(*) FROM `users` WHERE `username` = :username AND {$diffOnline} < 60");
$countOnline->execute(array(':username' => $rowAdmins['username']));
$onlineCount = $countOnline->fetchColumn(0);
$logo = "fa fa-ban";
if($onlineCount == "1") {
echo '<li><a href="#"><i></i><center>'. $rowAdmins['username'] .' <span class="labelon " style="border-radius:3px; color:white; float:right; font-weight:500; padding:6px; background-color:#1388a0;">Online</span></center></a></li>';
} else {
echo '<li><a href="#"><i></i><center>'. $rowAdmins['username'] .' <span class="labelon " style="border-radius:3px; color:white; float:right; font-weight:500; padding:6px; background-color:#f71c11;">Offline</span></center></a></li>';
}
}
?> 发布于 2019-10-11 16:55:01
你把这件事搞得太复杂了--你想要的东西可以在一个查询中更高效地完成。如果像你所说的那样,你只想让它显示在线的玩家,那么你就不需要响应“离线”文本的代码了。如果这是您的要求,那么我不确定您为什么要添加这一行:-)
此查询将返回具有请求排名的所有“在线”用户:
SELECT * FROM `users` WHERE `rank` = 0 and unix_timestamp() - `activity` < 60演示:https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=5fc7238d7c9ecc968fef7da4e4657a9d
因此,PHP代码可以简化为:
$findAdmins = $odb->query("SELECT * FROM `users` WHERE `rank` = 0 and unix_timestamp() - `activity` < 60");
while($rowAdmins = $findAdmins->fetch(PDO::FETCH_BOTH)) {
echo '<li><a href="#"><i></i><center>'. $rowAdmins['username'] .' <span class="labelon" style="border-radius:3px; color:white; float:right; font-weight:500; padding:6px; background-color:#1388a0;">Online</span></center></a></li>'
}这将返回具有该排名的所有在线用户,并为每个用户回显一个链接。
附注:在HTML中的<center>标签是obsolete -你应该使用CSS的text-align属性来居中你的文本。也可以考虑更改代码的这一部分。
发布于 2019-10-11 17:21:14
为什么会有第二个查询?如果判断为$onlineCount == 1,则用户名字段是唯一的,计算后$diffOnline变量保持不变。与常量60的比较是固定的。尝试以下代码:
$findAdmins = $odb->query("SELECT * FROM `users` WHERE `rank` = '0'");
while($rowAdmins = $findAdmins->fetch(PDO::FETCH_BOTH)) {
$logo = "fa fa-ban";
if(time() - $rowAdmins['activity'] < 60) {
echo '<li><a href="#"><i></i><center>'. $rowAdmins['username'] .' <span class="labelon " style="border-radius:3px; color:white; float:right; font-weight:500; padding:6px; background-color:#1388a0;">Online</span></center></a></li>';
} else {
echo '<li><a href="#"><i></i><center>'. $rowAdmins['username'] .' <span class="labelon " style="border-radius:3px; color:white; float:right; font-weight:500; padding:6px; background-color:#f71c11;">Offline</span></center></a></li>';
}
}https://stackoverflow.com/questions/58333505
复制相似问题