所以我有两个表(l_user
包含我的用户列表并l_online
显示当前登录的用户)。我想输出得分最多的人的列表,并显示他们是否在线(当前登录到该站点)。
我使用 aa Left Join 将这两个表放在一起。
select l_user.id, l_user.firstname, l_user.point, l_online.* from l_user LEFT JOIN l_online ON l_online.user_id = l_user.id order by l_user.point desc
使用下面的代码,我可以显示此查询的结果。
<p> <?php $cl = get_leaderboardonline(); ?>
<ul class="lists">
<?php $i = 1; ?>
<?php foreach ($cl as $l) :
?>
<?php if (count($l['username'])) : ?>
<li>
<?php echo $i; ?>. <?php echo $l['firstname']; ?> - <?php echo number_format($l['point']); ?> pts
<?php if ($l['username'] != NULL) : ?>
<span style="color:green;">ONLINE</span>
<?php endif; ?>
</li>
<?php $i++; ?>
<?php endif; ?>
<?php endforeach; ?>
输出如下所示:
1.) 凯文 - 100 分在线
2.) 凯文 - 在线 100 分
3.) 约翰 - 75 分
4.) 标记 - 50 分在线
5.) 杰里米 - 在线 5 分
6.) 杰里米 - 在线 5 分
7.) 艾米 - 0 分
8.) Deb - 0 分
我的问题是,如果用户从两个不同的设备或 IP 地址登录,它们被放置在 l_online 表中两次,所以当我执行 LEFT JOIN 时,它会在最终输出中两次引入用户,PHP 中有没有一种方法可以告诉它只显示用户一次,而不是 2 Kevin's,2 Jeremys。
我希望它看起来像这样:
1.) 凯文 - 100 分在线
2.) 约翰 - 75 分
3.) 标记 - 50 分在线
4.) 杰里米 - 在线 5 分
5.) 艾米 - 0 分
6.) Deb - 0 分