如何为mysql查询创建简单条件?

x6yk4ghg  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(261)

我有复杂的处理请求过滤。我有

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

我能用简单的方法创造吗?因为我觉得这太难看了

gudnpqoy

gudnpqoy1#

试着改变你的逻辑。我假设大部分代码将保持不变,所以您可以这样做:

var query = 'something'

if (p = 'all') {
   query = query + ' ... '
}

if (m = 'all') {
   query = query + ' ... '
}

if (o = 'all') {
   query = query + ' ... '
}

另外,由于sql注入、数据库列暴露等原因,用javascript设置实际查询不是一个好主意。最好在服务器端这样做。

ncecgwcz

ncecgwcz2#

有一种方法:

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
Map到查询部件
参加

相关问题