所以我有两个表(l_user
包含我的用户列表,l_online
显示当前登录的用户)。我想输出点数最多的人的列表,并显示他们是否在线(目前登录到网站)。
我使用左连接将这两个表放在一起。
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分在线 p>
2。)凯文 - 100分在线 p>
3。)约翰 - 75分
4。)马克 - 50分在线 p>
5.杰里米 - 5分在线 p>
6。)杰里米 - 5分在线 p>
7。)艾米 - 0分
8。)Deb - 0分
我的问题是,如果用户从两个不同的设备或IP地址登录它们被放置在l_online表中两次,那么当我执行LEFT JOIN时它会在最终输出中引入用户两次,是否有在PHP的方式,我可以告诉它只显示一个用户而不是2个凯文的,2个Jeremys。
我希望它看起来像这样:
1。)凯文 - 100分在线 p>
2。)约翰 - 75分
3。)马克 - 50分在线 p>
4.。杰里米 - 5分在线 p>
5。)艾米 - 0分
6。)Deb - 0分
答案 0 :(得分:2)
使用group by l_user.id
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 group by l_user.id order by l_user.point desc