co处理db查询,现遇到无限级树的情况,应该怎么实现无限级树
发布于 8 年前 作者 moxiaobei2 3634 次浏览 来自 问答

采用co ~3.0.1 db里query操作如下:db.js query=function (sql,params,callback){ pool.getConnection(function(err, connection) { if(err){ console.error(“DB connect fail:”+err); return callback(err,null); } connection.query("set names "+config.db.charset);//重新设置一下编码类型 connection.config.queryFormat = function (query, values) { if (!values) return query; return query.replace(/:(\w+)/g, function (txt, key) { if (values.hasOwnProperty(key)) { return this.escape(values[key]); } return txt; }.bind(this)); }; connection.query(sql,params,function(err, rows,fields) { if (err) { connection.rollback(function() { return callback(err,null); }); } callback(null,rows); connection.release(); return ; }); }); }

 coQuery=function(sql,param){
return function(callback) {
    query(sql,param,callback);
};
}

exports.coQuery=coQuery;

表结构:id,parent_id,content 
现遇到的情况如下在get请求当中
 co(function*(){
    var result=yield db.coQuery("select id,parent_id,name from xx where parent_id=0");
	//接下来,我应该如何取每一个对象里子children的值 ????
	//我本来想在这写个递归也去yield ,但是由于没有return ,根本不知道从哪里取值 
 )();
1 回复

兄弟,你的这个思路是错误的。自引用表无限分级查询有两种办法: 第一种:如果你的表中数据量不多(1000)以内,建议你一次把所有数据取出,然后使用JS代码转换成JSON对象,存储在内存中。这样可以节省多次数据库查询。或者干脆使用.json配置文件存储。 第二种:如果你的数据量较多,而且操作比较频繁。你可以使用如下语句查询。 select * from xx as x1 left join xx as x2 on x1.id = x2.parent_id where x1.parent_id = 0 order by x1.id 这样可以查出本级及子级节点

回到顶部