左连 和 内关联 的问题

需求:

先取發佈時間最新的10條資訊,再去掉該C端用戶看過的,在剩餘的資訊內取瀏覽數最多的(整個平台)。

需求sql分析:

先查出 全平台 未删除资讯 按发布时间排序

-- 按发布时间 倒序排 全平台 资讯
select A.title, B.published_at FROM article_lang A, article B WHERE A.article_uuid =B.uuid AND A.deleted=0 AND B.status=4 and A.lang='zh-cn' ORDER BY B.published_at DESC;

再查询出 每篇资讯的浏览数

-- 每篇资讯的浏览总数
SELECT log.source_uuid,SUM(logtype.value) FROM c_user_action_logs log,c_user_action_log_types logtype WHERE log.uuid=logtype.c_user_action_log_uuid AND logtype.key=1 AND log.action_souce_id=11 and logtype.deleted=0 AND log.`deleted`=0 group by log.source_uuid;

这里有个坑,这里要使用左连的sql语法,应该 资讯存在但是没有浏览量的话,记录浏览数那张表 是没有这个 资讯的记录的

如果使用关联查询,那么只能查询到 资讯表 和 资讯浏览表 都存在的资讯  (不对的,需求是要取 发布时间最新10条含 没有浏览数的)

so要使用左连,已资讯的表为准,算出各资讯的浏览数 

最后成品

select * FROM
-- 按发布时间 倒序排 全平台 资讯 article_lang.article_uuid
(select B.uuid,A.title, B.published_at FROM article_lang A, article B WHERE A.article_uuid =B.uuid AND A.deleted=0 AND B.status=4 and A.lang='zh-cn' ORDER BY B.published_at DESC) AS FABU
LEFT JOIN
-- 每篇资讯的浏览总数 c_user_action_log.source_uuid
(SELECT log.source_uuid,SUM(logtype.value) FROM c_user_action_log log,c_user_action_log_type logtype WHERE log.uuid=logtype.c_user_action_log_uuid AND logtype.key=1 AND log.action_souce_id=11 and logtype.deleted=0 AND log.`deleted`=0 group by log.source_uuid) AS SUMTITLE
ON FABU.uuid=SUMTITLE.source_uuid ORDER BY FABU.published_at DESC;

1.

分边写出你需要的sql 如 上面的

-- 按发布时间 倒序排 全平台 资讯

-- 每篇资讯的浏览总数

2.

再把2个表加个名字 ( -- 按发布时间 倒序排 全平台 资讯) AS 表名

采坑点:

猜你喜欢

转载自www.cnblogs.com/kaibindirver/p/10130554.html