防止重复记录在PHP输出左连接中显示

时间:2012-12-13 18:33:19

标签: php mysql duplicates left-join duplicate-removal

所以我有两个表(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分在线

2。)凯文 - 100分在线

3。)约翰 - 75分

4。)马克 - 50分在线

5.杰里米 - 5分在线

6。)杰里米 - 5分在线

7。)艾米 - 0分

8。)Deb - 0分

我的问题是,如果用户从两个不同的设备或IP地址登录它们被放置在l_online表中两次,那么当我执行LEFT JOIN时它会在最终输出中引入用户两次,是否有在PHP的方式,我可以告诉它只显示一个用户而不是2个凯文的,2个Jeremys。

我希望它看起来像这样:

1。)凯文 - 100分在线

2。)约翰 - 75分

3。)马克 - 50分在线

4.。杰里米 - 5分在线

5。)艾米 - 0分

6。)Deb - 0分

1 个答案:

答案 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