Предотвратить отображение повторяющихся записей в выводе PHP левое соединение

Итак, у меня есть две таблицы (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.) Деб - 0 баллов

Моя проблема заключается в том, что если пользователь входит в систему с двух разных устройств или IP-адресов, они дважды помещаются в таблицу l_online, поэтому, когда я выполняю LEFT JOIN, он дважды вводит пользователя в окончательный вывод, есть ли способ в PHP где я могу указать отображать пользователя только один раз, а не 2 Кевина, 2 Джереми.

Я хочу, чтобы это выглядело так:

1.) Кевин - 100 очков ОНЛАЙН

2.) Джон - 75 баллов

3.) Оценка - 50 баллов ОНЛАЙН

4.) Джереми - 5 баллов ОНЛАЙН

5.) Эми - 0 очков

6.) Деб - 0 баллов


person techora    schedule 13.12.2012    source источник


Ответы (1)


Используйте 1_

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
person GBD    schedule 13.12.2012
comment
Аааа, я знал, что это что-то простое, просто не мог вспомнить. Большое тебе спасибо. - person techora; 13.12.2012
comment
есть также select distinct, который будет работать, если вы не выбираете какие-либо изменяющиеся поля, такие как IP-адреса. - person Marc B; 13.12.2012