2

これが私がやろうとしていることです。重複する行が含まれている可能性のあるユーザー評価のテーブルがあります。DISTINCT各ユーザーの値のみを取得したいと考えています。

以下の表の例では。user_id 1と50のみが特定の場所に属している場合は、各ユーザーの一意のvideo_idのみをとして返す必要がありますCOUNT。ユーザー1はビデオ1、2、および1を渡しました。したがって、ユーザー50はビデオ2を渡しました。したがって、この場所の合計は3になります。DISTINCT'sクエリに2つ必要だと思いますが、そうではありません。これを行う方法を確認してください。

+-----+----------+----------+
| id  | video_id | user_id  |
+-----+----------+----------+
| 1   |       1  |        1 |
| 2   |       2  |       50 |
| 3   |       1  |      115 |
| 4   |       2  |       25 |
| 5   |       2  |        1 |
| 6   |       6  |       98 |
| 7   |       1  |        1 |
+-----+----------+----------+

これは私の現在のクエリがどのように見えるかです。

$stmt2 = $dbConn->prepare("SELECT COUNT(DISTINCT user_assessment.id)
FROM user_assessment
LEFT JOIN user ON user_assessment.user_id = user.id
WHERE user.location = '$location'");
$stmt2->execute();
$stmt2->bind_result($video_count);
$stmt2->fetch();
$stmt2->close();

したがって、私のクエリはその特定の場所のすべてのカウントを返しますが、特定の各ユーザーからの一意でない結果を省略しません。

これが理にかなっていることを願っています、助けてくれてありがとう。

4

2 に答える 2

6
SELECT COUNT(DISTINCT ua.video_id, ua.user_id)
FROM user_assessment ua
INNER JOIN user ON ua.user_id = user.id
WHERE user.location = '$location'

あなたは中にたくさんのことを書くことができるCOUNTので、あなたが正確に欲しいものをそれに入れることを躊躇しないでください。これにより、異なるカップルの数が(video_id, user_id)わかります。これは、私が正しく理解していれば、あなたが望んでいたものです。

于 2012-10-16T15:58:19.110 に答える
1

以下のクエリは、ユーザーごとに個別の動画を取得するサブクエリに参加します。次に、メインクエリはそれらの数値の合計を実行して、その場所の動画の合計を取得します。

SELECT 
  SUM(video_count)
FROM 
  user u
  INNER JOIN 
  ( SELECT
      ua.user_id,
      COUNT(DISTINCT video_id) as video_count
    FROM
      user_assessment ua
    GROUP BY
      ua.user_id) uav on uav.user_id = u.user_id
WHERE 
  u.location = '$location'

$locationすでにバインディングを使用しているため、バインドパラメータを渡すこともできることに注意してください。質問の一部ではないので、これはあなたに任せます。;-)

于 2012-10-16T15:51:31.773 に答える