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