<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>