以下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。
以下是watches表:
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有没有人知道为什么会发生这种情况?当然,如果需要的话,我可以提供更多的结构代码。
发布于 2017-09-13 00:26:56
我看到的watches表中没有指向用户的链接。您可以获得链接到该用户正在学习的课程的所有视频的每个视频(任何人)的观看次数。
如果您想要使用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_idhttps://stackoverflow.com/questions/46180399
复制相似问题