【问题标题】:Prevent duplicate records from displaying in PHP output left join防止在 PHP 输出左连接中显示重复记录
【发布时间】:2012-12-01 17:12:57
【问题描述】:

所以我有两个表(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 个 Kevin's,2 Jeremys。

我希望它看起来像这样:

1.) 凯文 - 在线 100 分

2.) 约翰 - 75 分

3.) 标记 - 在线 50 分

4.) 杰里米 - 在线 5 分

5.) 艾米 - 0 分

6.) Deb - 0 分

【问题讨论】:

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


    【解决方案1】:

    使用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
    

    【讨论】:

    • 啊,我知道这是一个简单的东西,我只是记不起。非常感谢。
    • 还有select distinct,只要您不选择任何“更改”字段,例如 IP 地址,它就可以工作。
    猜你喜欢
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2013-11-11
    • 2014-04-10
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多