以下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
有人能看出为什么会发生这种情况吗?如果需要,我当然可以提供更多的结构代码。
答案 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