0

したがって、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 ポイント

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 に答える