首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL - count值应为0时返回1

MySQL - count值应为0时返回1
EN

Stack Overflow用户
提问于 2017-09-12 23:31:43
回答 1查看 71关注 0票数 3

以下SQL来自一个基于视频的在线课程系统。该查询将显示给定用户的课程实例,并显示他或她已观看或尚未观看的课程视频的信息。

代码语言:javascript
复制
SELECT
    GROUP_CONCAT(
        COALESCE(watches.num_watches, 0) ORDER BY cvi.position
    ) AS watches_per_vid
FROM course_instances tci
LEFT JOIN videos 
    ON tci.node IN (
       SELECT node_id 
       FROM _taxonomy_assocs 
       WHERE item_id = videos.id
    )
LEFT JOIN course_indexes cvi 
    ON videos.vimeo_id = cvi.vimeo_id 
    && cvi.course_id = tci.node
LEFT JOIN (
    SELECT watches.vid_id, SUM(times) as num_watches
    FROM watches
    GROUP BY watches.vid_id
) watches 
   ON watches.vid_id = videos.id
WHERE tci.user = "vgaz1kjbc65" 
&& node = "jmi_gmoan26" #<-- for example
GROUP BY tci.id

例如,对于watches_per_vid,这将导致

代码语言:javascript
复制
4,4,5,2,2,2,1

然而,我发现即使用户还没有观看视频-这意味着在watches表中没有该用户和视频的条目,它也会生成1,而不是0。

以下是watches表:

代码语言:javascript
复制
field           | type         | null   | default            | extra
------------------------------------------------------------------------------------------
id (primary)      varchar(11)    n
user_id           varchar(11)    n
vid_id            varchar(11)    n
latest_stamp      timestamp      n        CURRENT_TIMESTAMP    ON UPDATE CURRENT_TIMESTAMP
times             int(11)        n        1

有没有人知道为什么会发生这种情况?当然,如果需要的话,我可以提供更多的结构代码。

EN

回答 1

Stack Overflow用户

发布于 2017-09-13 00:26:56

我看到的watches表中没有指向用户的链接。您可以获得链接到该用户正在学习的课程的所有视频的每个视频(任何人)的观看次数。

如果您想要使用rhas观看视频的次数,则需要更改

代码语言:javascript
复制
SELECT watches.vid_id, SUM(times) as num_watches
FROM watches
GROUP BY watches.vid_id

转到

代码语言:javascript
复制
SELECT watches.vid_id, SUM(times) as num_watches
FROM watches
WHERE watches.user_id = tci.user
GROUP BY watches.vid_id
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46180399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档