请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于mysql连表查询的问题

各位小伙伴,大家好, 最近在swoole课程群里面有小伙伴在咨询有关连表查询的一些事情,其实连表查询在实际工作中,特别是中型以上的公司基本不建议用连表查询的 原因我汇总如下:

1、你要做连表查询的话,后续不太好维护

2、当数据大的时候连表查询很影响性能,除非万不得已的时候才用连表


场景:

比如你要查询文章的信息,并且是分页列表展示,然后文章里面还有其他的内容比如栏目等,但是文章表里面的栏目肯定存的是栏目表的主键ID, 但是在平台中展示文章列表的时候肯定是需要展示栏目的名称的,那这个时候很多工程师基本是使用关联连表查询比比如 left join等的。但是实际上不建议这样来做。 作法如下:

1、取出文章的内容(比如第一页的时候 展示 20条内容) ,放到一个数组里面;

2、并且把这数据中栏目id放到 另外一个数组里面 需要去重处理, 然后在拿到这些id  去栏目表里面 in查询下,1条sql。不是多个sql

3、查询后组织下栏目的数据 id=>name的关系

4、在列表展示的时候 循环文章的数组、展示栏目的时候就可以拿到3中的对应关系对上。


其他场景:

待编辑......


正在回答 回答被采纳积分+3

4回答

kingofzihua 2018-04-04 09:41:25

这个,laravel中 关联模型 with 就是这样的 

4 回复 有任何疑惑可以回复我~
提问者 singwa 2018-04-03 19:59:50

留下您的脚步

2 回复 有任何疑惑可以回复我~
不吃鱼的喵儿 2018-04-09 11:59:06
$lists = $this->post->getResult(['uid'=>$this->d['uid'],'state'=>2], $f='*',$size,$offset)->result();
$content_id = array();
foreach ($lists as $val){
    $content_id[] = $val->content_id;     //content_id变为数组
    $val->pic = explode('|', $val->pic);
    $val->comment_list = array();    // 评论列表
    $val->parise = 0;           // 点赞数
}
if (empty($content_id)) {
    $data['list'] = $lists;
} else {
    $reply = array();
    //ci框架的查询语句,放到模型里了,就是简单的sql语句
    $replyResult = $this->comment->getWhereIn(['state'=>2],'comment_id,from_username,to_username,comment,content_id,to_uid,create_time,from_uid',$content_id)->result();
    foreach ($replyResult as $item) {
        $reply[$item->content_id][] = $item;
    }
    $parise = array();
    $pariseResult = $this->parise->getContentIdsPariseNumber(array('content_id'=>$content_id))->result();
    foreach ($pariseResult as $pr) {
        $parise[$pr->content_id] = $pr->num;
    }
    foreach ($lists as $val){
        $val->comment_list = empty($reply[$val->content_id]) ? array() : $this->getReplyList($reply[$val->content_id]);
        $val->parise = empty($parise[$val->content_id]) ? 0 : $parise[$val->content_id];
    }
}
$data['list'] = $lists;


1 回复 有任何疑惑可以回复我~
不吃鱼的喵儿 2018-04-09 11:57:21
公司代码就是这样,先查一个表的所有信息,然后,foreach循环出来,把需要的数组放到一个字段里,
然后,下一个表查询的时候,用where in查询。最后合并数据
1 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信