nodejs -- 分组查询,从25行代码,优化成 50行

分组查询 写代码比较简单的就是循环 获取大类 然后匹配小类 ; 大概代码是25行, 然后优化成联表查询,大概50行。

原代码如下

let results = []
    try {
        let home_list = await db('all', 'select * from home_list ORDER BY _sort ASC')
        for(var i = 0; i < home_list.length; i++){
            let row = home_list[i]
            console.log(row)
            try {
                let course_list = await db('all', 'select * from course where home_list_id=?', [row.id])
                results.push({
                    name: row.name,
                    children: course_list
                })
            } catch (error) {
                console.log(error)  
                resolve({code: -1})
            }
        }
    } catch (error) {
        console.log(error)  
        resolve({code: -1})  
    }

联表查询优化如下

flat_to_tree(flat, option){
      var arrs = []
      var item = []
        let config = {
            pid: option.pid || 'pid',
            children: option.children || 'children'
        }
      flat.forEach((a, i, arr) => {
            item.push(a)
            if(arr[i + 1] && a[config.pid] !== arr[i + 1][config.pid]){
                arrs.push({
                    ...a,
                    [config.children]: JSON.parse(JSON.stringify(item))
                })
                item = []
            }
            if((!arr[i + 1])){
                arrs.push({
                    ...a,
                    [config.children]: JSON.parse(JSON.stringify(item))
                })
                item = []
            }
        })
      return arrs
    }

let results
    try {
        results = await db('all', `
        select h.name as home_list_name, c.name as course_name, h.id as home_list_id, c.id as course_id, c.src as course_img 
        from home_list as h  join  course as c 
        on h.id=c.home_list_id 
        ORDER BY h._sort ASC;`)
        results = _.flat_to_tree(results, {
            pid: 'home_list_id',
            children: 'children'
        })
    } catch (error) {
        console.log(error)
        resolve({code: -1})
    }
    resolve({code: 200, data: results})

这里的话,就是联表查询,得到平数据结构,但是我们需要树结构。

这里的flat_to_tree函数就是做转tree结构作用

目前只支持二级。

效果


--END--

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前面的章节我们介绍了如何设计最优的库表结构、 如何建立最好的索引, 这些对于高性能来说是必不可少的。 但这些还不够...
    好好学习Sun阅读 2,754评论 0 38
  • 今天看到一位朋友写的mysql笔记总结,觉得写的很详细很用心,这里转载一下,供大家参考下,也希望大家能关注他原文地...
    信仰与初衷阅读 4,818评论 0 30
  • 去年9月份的时候我和两个计算机院的男生去俄罗斯参加了一个计算机应用设计大赛把我的硬盘给丢了。 丢东西的过程并没有什...
    丢丢丢阅读 1,301评论 2 3
  • 亲子日记43 9月25日 今天是中秋节假期过后的第一天上学,早晨大宝跟往常一样早早就起来了,我由于身体原因没有做早...
    马佳浩妈妈阅读 386评论 0 1
  • zs 夜光之下,丝丝微微的亮光,照射而下。岁月已不知过往了多久,我已不知存在了多久! 我只是一位老...
    zs123阅读 309评论 0 1

友情链接更多精彩内容