MySQL - 当值为0时,计数值返回1

时间:2017-09-12 15:31:43

标签: mysql sql

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

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,这导致例如

4,4,5,2,2,2,1

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

这是手表:

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

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

1 个答案:

答案 0 :(得分:3)

我看到手表中的用户没有链接。对于链接到用户所用课程的所有视频,您将获得(每个人)观看每个视频的次数。

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

SELECT watches.vid_id, SUM(times) as num_watches
FROM watches
GROUP BY watches.vid_id

SELECT watches.vid_id, SUM(times) as num_watches
FROM watches
WHERE watches.user_id = tci.user
GROUP BY watches.vid_id