我有复杂的句柄请求过滤。我有
var p = payment , o = outlet, and m = member
我需要为每一个变量提供不同的条件..比如
p == 'all' && m =='all' && o =='all'
p == 'all' && m == 'all' && o != 'all'
p == 'all' && m != 'all' && o == 'all'
p == 'all' && m != 'all' && o != 'all'
p != 'all' && m == 'all' && o == 'all'
p != 'all' && m == 'all' && o != 'all'
p != 'all' && m != 'all' && o != 'all'
p != 'all' && m != 'all' && o == 'all'
因为我想要查询不同的条件,例如
if(p == 'all' && m =='all' && o =='all'){
"select a,b,c,d from table"
}
if(p == 'all' && m == 'all' && o != 'all'){
"select a,b,c,d from table where o=o"
}
我可以创建简单的方法吗?因为我认为这太难看了
答案 0 :(得分:0)
尝试改变你的逻辑。我假设大部分代码都保持不变,所以你可以这样做:
var query = 'something'
if (p = 'all') {
query = query + ' ... '
}
if (m = 'all') {
query = query + ' ... '
}
if (o = 'all') {
query = query + ' ... '
}
PS。由于sql注入,数据库列暴露等原因,在javascript中设置实际查询并不是一个好主意。你最好做这个服务器端。
答案 1 :(得分:0)
这是一种方式:
var params = {
p: 'all',
m: '2',
o: '7'
};
var conds = Object.keys(params)
.map(key => ({ name: key, value: params[key], isAll: params[key] == 'all' }))
.filter(c => !c.isAll)
.map(c => `\`${c.name}\` = '${c.value}'`)
.join(" AND ");
var query = "SELECT FROM table" + (conds ? " WHERE " + conds : "");
console.log(query);
all
测试。all
s