mysql 有感

#话题
SELECT cm.id,
  cm.cm_alias_name,
  cm.cm_cover_url
  ,ifnull(aa.view_num/bb.total,0) view_progress
  ,aa.view_num
  ,bb.total
FROM custom_module cm
LEFT JOIN (
            SELECT bb.cm_id ,uvr.user_id, count(uvr.video_id) view_num,uvr.last_view_time
           FROM user_video_rel uvr
             inner JOIN (
                          SELECT video_id,aa.cm_id
                          FROM coursepackage_video_rel cvr
                            INNER JOIN (
                                         SELECT cvtr.coursepackage_id id ,cm.id cm_id
                                         FROM custom_module cm
                                           inner JOIN coursepackage_video_type_rel cvtr ON FIND_IN_SET(cvtr.video_type_id,REPLACE(cm.cm_program_id_two,';',
                                                                                                                                  ','))
                                         where cm.cm_type = 5
                                         GROUP BY cm.id, cvtr.coursepackage_id
                                       ) aa ON aa.id = cvr.course_package_id
                          GROUP BY aa.cm_id,video_id
                        ) bb ON bb.video_id = uvr.video_id
           WHERE uvr.user_id = #{userId} AND (uvr.is_finish or uvr.is_finish_audio)
           group by bb.cm_id
           ORDER BY uvr.last_view_time DESC)aa ON aa.cm_id = cm.id
  LEFT JOIN (SELECT
               count(bb.video_count) total,
               bb.cm_id
             FROM (
                    SELECT
                      count(cvr.video_id) video_count,
                      cm.id               cm_id
                    FROM coursepackage_video_type_rel cvtr
                      INNER JOIN custom_module cm
                        ON cm.cm_type = 5 AND FIND_IN_SET(cvtr.video_type_id,
                                                          REPLACE(cm.cm_program_id_two,
                                                                  ';', ','))
                      INNER JOIN coursepackage_video_rel cvr ON cvtr.coursepackage_id = cvr.course_package_id
                    GROUP BY cm.id, cvr.video_id
                  ) bb
             GROUP BY bb.cm_id)bb ON bb.cm_id = cm.id
WHERE cm.cm_type = 5
;



### 同学
select aa.user_id,aa.view_num ,bb.total_num,aa.view_num/bb.total_num view_progress,
                                            ui.id user_id,ui.user_name,ui.pic_name,ui.head_img_url,if(gi.id is NULL ,0,1) is_glory,aa.last_view_time
                                                                     access_time
from
  custom_module cm
  inner join (
            SELECT aaa.cm_id ,aaa.user_id, aaa.last_view_time,count(aaa.video_id) view_num
            FROM (SELECT bb.cm_id ,uvr.user_id, uvr.last_view_time
                    ,uvr.video_id,(uvr.is_finish or uvr.is_finish_audio)
                  FROM user_video_rel uvr
                    inner JOIN (
                                 SELECT video_id,aa.cm_id
                                 FROM coursepackage_video_rel cvr
                                   INNER JOIN (
                                                SELECT cvtr.coursepackage_id id ,cm.id cm_id
                                                FROM custom_module cm
                                                  inner JOIN coursepackage_video_type_rel cvtr ON FIND_IN_SET(cvtr.video_type_id,REPLACE(cm.cm_program_id_two,';',
                                                                                                                                         ','))
                                                where cm.cm_type = 5 and cm.id =#{customModuleId}
                                                GROUP BY cvtr.coursepackage_id
                                              ) aa ON aa.id = cvr.course_package_id
                                 GROUP BY video_id
                               ) bb ON bb.video_id = uvr.video_id
                  WHERE  (uvr.is_finish or uvr.is_finish_audio) #uvr.user_id = #{userId} AND
                  )   aaa
                group by aaa.user_id
            ORDER BY aaa.last_view_time DESC
             ) aa on aa.cm_id = cm.id
  inner join (
               select bb.cm_id ,count(bb.video_id) total_num
               from(
                     SELECT video_id,aa.cm_id
                     FROM coursepackage_video_rel cvr
                       INNER JOIN (
                                    SELECT cvtr.coursepackage_id id ,cm.id cm_id
                                    FROM custom_module cm
                                      inner JOIN coursepackage_video_type_rel cvtr ON FIND_IN_SET(cvtr.video_type_id,REPLACE(cm.cm_program_id_two,';',
                                                                                                                             ','))
                                    where cm.cm_type = 5 and cm.id =#{customModuleId}
                                    GROUP BY cvtr.coursepackage_id
                                  ) aa ON aa.id = cvr.course_package_id
                     GROUP BY video_id
                   ) bb
             ) bb on bb.cm_id = cm.id
  INNER JOIN user_info ui ON aa.user_id = ui.id AND ui.disable_flag = 0
  LEFT JOIN teacher_info ti ON ui.id = ti.user_id
  LEFT JOIN glory_info gi ON gi.user_id = ui.id
WHERE 1=1
GROUP BY aa.user_id

ORDER BY view_progress DESC,access_time DESC

mysql 有感(前面一条话题sql由于user_id 把一对多,变成了一对一,所以count产生了作用 )

后一条:则必须通过套多一层select,来计算数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值