我怎样才能为查询mysql创建简单的条件?

时间:2018-06-04 20:43:50

标签: javascript mysql

我有复杂的句柄请求过滤。我有

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

我可以创建简单的方法吗?因为我认为这太难看了

2 个答案:

答案 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);

  1. 从参数对象开始,将其转换为包含键和值的对象数组,以及all测试。
  2. 过滤掉all s
  3. 映射到查询部分
  4. 加入