6.使用" union all " 拼接多条sql实际应用

1.在实际开发中,遇到要返回一个对象List,查询时,缺少一个参数,实现的话目前我知道两个办法。一是将这个list中的对象挨个的遍历出来,每个对象所需参数都启用一次数据库查询,查出后再补充回对应位置。(参照node分类下的第一篇文章。)二是使用" union all "关键字将多条数据库语句进行拼接,最后只是用一次查询,查出结果。很明显,第一种方法,每次都需要打开数据库链接,会占用更多的服务器资源。使用第二种方法更优,以下就是实际的使用示例,供大家参考。

/**查询粉丝或者关注的圈子称号等级其中data是数据库查出应返回的对象List */
function getQuanziLevel(data, language, Response) {
    try {
     /*声明一个空数组,用来存储多个sql语句*/
var per_level_sql_arr = [];
     /*确定data的长度,并利用遍历data时的下标做好对应数据的标记*/
for (var k = 0; k < data.length; k++) { var user_id = data[k].user_id; var per_level_sql = "select {0} k_idx, hot_posts from quanzi_uinfo where usr_id = {1}"; per_level_sql_arr.push(per_level_sql.format(k, user_id)); data[k].per_level = 0; }; /**连查关注、粉丝圈子等级 */ var per_level_sqls = per_level_sql_arr.join(" union all "); mysqlOperate(per_level_sqls, function (per_level_err, per_level_rows) { if (!per_level_err) { if (0 < per_level_rows.length) { for (var l = 0; l < per_level_rows.length; l++) { var per_level_row = per_level_rows[l]; var k_idx = per_level_row.k_idx; if (myMD5.isDefine(data[k_idx])) { var hot_posts = per_level_row.hot_posts; var per_level = 0; if (hot_posts >= 5 && hot_posts < 20) { per_level = 1; } else if (hot_posts >= 20 && hot_posts < 50) { per_level = 2; } else if (hot_posts >= 50 && hot_posts < 100) { per_level = 3; } else if (hot_posts >= 100) { per_level = 4; }                  /*使用标识将值赋给对应的对象*/ data[k_idx].per_level = per_level; } } Response.end(JSON.stringify({ status: 1, data: data, message: LANG[language].queryOK })); return; } } }); } catch (e) { Response.end(JSON.stringify({ status: -1, message: "other exception" })); return; } };

原文地址:https://www.cnblogs.com/Nick-Hu/p/9796224.html