したがって、2つのテーブルがあります(l_user
ユーザーのリストが含まl_online
れ、現在ログインしているユーザーが表示されます)。ポイントが最も多い人のリストを出力し、オンラインであるかどうかを表示したい(現在サイトにログインしています)。
これら 2 つのテーブルをまとめるために、左結合を使用しました。
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 ポイント
私の問題は、ユーザーが2つの異なるデバイスまたはIPアドレスからログインした場合、それらがl_onlineテーブルに2回配置されるため、LEFT JOINを実行すると、最終出力でユーザーが2回表示されることです。PHPでできる方法はありますか? 2人のケビン、2人のジェレミーではなく、ユーザーを1回だけ表示するように指示します。
私はそれを次のようにしたい:
1.) ケビン - オンラインで 100 ポイント
2.) ジョン - 75 ポイント
3.) マーク - オンラインで 50 ポイント
4.) ジェレミー - オンラインで 5 ポイント
5.) エイミー - 0 ポイント
6.) デブ - 0 ポイント