多表关联查询如何优化,求指点。9个表关联

新手上路,请多包涵

用户表 user

idnamecover
1昵称头像
2昵称头像

作品表 project

idcontentpicuid
1内容封面图用户id
2内容封面图用户id

即刻表 jike

idcontentpicuid
1内容封面图用户id
2内容封面图用户id

作品评论表 project_comment

idcontentpiduid
1内容对应用户project表id用户id

| 2 | 内容 | 对应用户project表id| 用户id |

即刻评论表 jike_comment

idcontentpiduid
1内容对应用户jike表id用户id
2内容对应用户jike表id用户id

作品点赞表project_like

idpiduiddateline
1对应用户project表id用户id时间
2对应用户project表id用户id时间

即刻点赞表jike_like

idpiduiddateline
1对应用户jike表id用户id时间
2对应用户jike表id用户id时间

作品评论点赞表project_comment_like

idpciduiddateline
1对应用户project_comment表id用户id时间
2对应用户project_comment表id用户id时间

即刻评论点赞表jike_comment_like

idpciduiddateline
1对应用户jike_comment表id用户id时间
2对应用户jike_comment表id用户id时间

需求:作品即刻混合列表,作品即刻不重复
条件:我的作品、我的即刻、我评论的作品,我评论的即刻
排序:赞我的作品时间、赞我的即刻时间、赞我评论作品的时间、赞我评论的即刻时间,按时间倒序
内容:
1、封面图,作品id;即我被赞过的作品、即刻 和我被赞过的评论 对应的作品、即刻 封面图、id;
2、每条列表需要赞过我的人数;即我的作品、或即刻、或我的作品评论或我的即刻评论的人数
3、赞过我此条(作品、或即刻、或作品评论、或即刻评论)信息的至做10个人的头像、昵称
4、区分此条信息是我的作品、我的即刻、我评论的作品、我评论的即刻

原sql 语句:
select * from (
(select l.id,l.pid,l.dateline,l.uid,0 as jike,0 as is_comment,0 as commentid from project_like l left join project p on l.pid=p.id where p.uid={$uid} order by l.dateline desc)
union all
(select sl.id,sl.sid,sl.dateline,sl.uid,1 as jike,0 as is_comment,0 as commentid from single_like sl left join single s on sl.sid = s.id where s.uid={$uid} order by sl.dateline desc)
union all (
select pcl.id,pc.pid,pcl.dateline,pcl.uid,0 as jike,1 as is_comment,pcl.pid as commentid from project_comment_like pcl left join project_comment pc on pcl.pcid as commentid = pc.id where pc.uid={$uid} order by pcl.dateline desc)
union all
(select scl.id,sc.pid,scl.dateline,scl.uid,1 as jike,1 as is_comment,scl.pid as commentid from single_comment_like scl left join single_comment sc on scl.pcid = sc.id where sc.uid={$uid} order by scl.dateline desc)) a order by dateline desc limit 0,50;
查完后再循环查找每条点赞的总人数,和最多10点赞的人的信息;

求高手优化

阅读 1.4k
1 个回答

直接单表操作利用mysql缓存加快查询也能狗使得逻辑清晰,在代码层上操作

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题