0

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

4

1 回答 1

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
于 2012-12-13T18:35:53.997 回答