【发布时间】:2012-10-16 15:43:13
【问题描述】:
这就是我想要做的。我有一个包含重复行的用户评估表。我希望只为每个用户获取 DISTINCT 值。
在下表的示例中。如果只有 user_id 1 和 50 属于特定位置,则只有每个用户的唯一 video_id 应作为 COUNT 返回。用户 1 传递了视频 1、2 和 1。所以应该只有 2 条记录,而用户 50 传递了视频 2。所以这个位置的总数是 3。我想我需要在查询中有两个 DISTINCT's,但不知道该怎么做。
+-----+----------+----------+
| 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();
所以我的查询会返回该特定位置的所有计数,但不会忽略来自每个特定用户的非唯一结果。
希望这是有道理的,感谢您的帮助。
【问题讨论】:
-
没有解决方案,只有优化:使用 INNER JOIN。它比 LEFT JOIN 快,而且效果是一样的,因为你在 WHERE 子句中使用了连接表。
-
您知道 SQL 查询中允许换行吗?
-
@GolezTrol,是的,谢谢。这就是我复制丢失换行符的代码的方式。我已经编辑了我的帖子,使其更易于阅读。
-
@Jako 。 . .您的描述和您的示例查询/数据彼此无关。您使用“位置”和“视频”之类的词,但查询中没有这些词。您能否修改问题以使其更清楚您想要什么?
-
@GordonLinoff 很抱歉,稍微调整了问题以提供帮助。
标签: mysql