格式化SQL语句之格式化where语句

<pre name="code" class="html">

先上代码
var conditions = [
    {key: 'pname', operator: '=', value: 'test'},
    {key: 'zoneid', operator: '=', value: 2, link: 'and'}
];


function formatCondition(conditions) {
    var condition = ' where ';
    var t = Object.prototype.toString.call(conditions);
    if (t === '[object Object]') {
        for (var k in conditions) {
            if (conditions[k].link) {
                condition += ' ' + conditions[k].link  + ' `' + k + '`' + conditions[k].operator + mysql.escape(conditions[k].value);
            } else {
                if (conditions[k].operator === 'in') {
                    condition += ' `' + k + '`' + ' ' + conditions[k].operator + ' (' + conditions[k].value + ')';
                } else {
                    condition += ' `' + k + '`' + conditions[k].operator + mysql.escape(conditions[k].value);
                }
            }
        }
    }
    if (t === '[object Array]') {
        conditions.forEach(function(co) {     
            if (co.link) {
                condition += ' ' + co.link  + ' `' + co.key + '`' + co.operator +  mysql.escape(co.value);
            } else {
                if (co.operator === 'in') {
                    condition += ' `' + co.key + '`' + ' ' + co.operator + ' (' + co.value + ')';
                } else {
                    condition += ' `' + co.key + '`' + co.operator +  mysql.escape(co.value)
                }
            }
        });
    }
    console.log(condition)
    return condition;
}



formatCondition(conditions)
</pre><pre name="code" class="html">
这里只是做一个例子所以我把value定义好了实际上是通过post传过来的。where格式化函数是<span style="font-family: Arial, Helvetica, sans-serif;">formatCondition,先把字符where赋值给condition然后通过</span><pre name="code" class="html">Object.prototype.toString.call把conditions转为字符串并赋值给t。如果t是对象中包含对象那么就执行第一个if下的类容首先遍历对象condition如果
有link的key那么就执行for下的第一个if,其实这主要是为and准备的。如果有operator的值是in那么就执行对应的类容这是为子查询准备的,最后匹配的是
<pre name="code" class="html"><pre name="code" class="html">condition += ' `' + k + '`' + conditions[k].operator + mysql.escape(conditions[k].value);<span style="font-family: Arial, Helvetica, sans-serif;">这个方法,我就仔细说下,首先condition是where,然后</span>
<span style="font-family: Arial, Helvetica, sans-serif;">k对应着key其他以此类推,由于我给你conditions是[]object Array]所以这些都不会匹配到。</span>
<span style="font-family: Arial, Helvetica, sans-serif;">
</span>
 接下来的东西很类似了,我就把我的例子说下,首先匹配 
condition += ' `' + co.key + '`' + co.operator + mysql.escape(co.value)结果是'where' 'pname'='test' 
 
<span style="font-family: Arial, Helvetica, sans-serif;">然后匹配</span><span style="font-family: Arial, Helvetica, sans-serif;">condition += ' ' + co.link  + ' `' + co.key + '`' + co.operator +  mysql.escape(co.value)连起来就是</span><span style="font-family: Arial, Helvetica, sans-serif;">'where'  'pname'='test'  ‘and’ 'zoneid'=2 大功告成,这样</span>
<span style="font-family: Arial, Helvetica, sans-serif;">一个SQL的where部分就格式化成功了。其他语句也类似,这样比直接写SQL语句效率要高上很多。</span>
 
 

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值