【问题标题】:Get all results from MySQL query when no parameter has been sent未发送参数时从 MySQL 查询中获取所有结果
【发布时间】:2017-10-05 10:04:32
【问题描述】:

我正在开发一个 NodeJS/MySQL 应用程序。

有一个下拉菜单(salesperson),每个选项都有一个值,该值作为条件发送到 MySQL 查询中,用于同一表的行。

我需要有一个“全部”选项(适用于销售人员),它不会基于此选择抽象结果,它的作用就像忽略MySQL 查询可以作为通配符使用,这样更有意义。

但是,当我选择了“所有销售人员”(没有价值)时,我无法弄清楚如何通过或不通过所有这些标准。

将表单的选定选项作为值传递给 MySQL 查询的函数

var field = req.body.mode;
var start_date = req.body.start_date;
var end_date = req.body.end_date;
var operator = req.body.operator;
var paid_operator = req.body.paid_operator;
var user_id = user.id;
var salesperson = req.body.salesperson;

db.select_between_dates_office( table, field, start_date, end_date, user_id, 
salesperson, function(data) { // do something
});

MySQL 查询

this.select_between_dates_office = function( table, field, start_date, end_date, user_id, 
salesperson, callback ){

var query_string = "select * from "+ table +" where "+ field +" between '"+ start_date +"' 
and '"+ end_date + "' and user_id='" + user_id +"' and salesperson='" + salesperson + "'"; 

connection.query( query_string, function(err,rows){
    callback (rows);
     })
}

【问题讨论】:

  • 您可以使用case 指令创建查询。比如that answer

标签: jquery mysql node.js


【解决方案1】:

如果没有选择销售人员,您应该有一个不包含salesperson where 子句的 if 条件,例如:

if(salesperson !== '') {
    var query_string = "select * from "+ table +" where "+ field +" between '"+ start_date +"' 
and '"+ end_date + "' and user_id='" + user_id +"' and salesperson='" + salesperson + "'"; 
} else {
    var query_string = "select * from "+ table +" where "+ field +" between '"+ start_date +"' 
and '"+ end_date + "' and user_id='" + user_id + "'"; 
}

【讨论】:

  • 完美的解决方案,我通过将我的思想锁定在中等函数而不是您建议的 db 子句中的条件语句来使其变得困难,这更容易。谢谢
  • 很高兴为您提供帮助:)
  • 恕我直言,您所要求的应该是标准的数据库行为。对参数进行简单检查并且如果您不想全部返回则不执行比复制代码更有意义。可悲的是,这似乎是唯一的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-25
  • 2017-07-11
  • 2016-07-23
  • 2012-04-19
  • 1970-01-01
  • 2019-01-02
  • 1970-01-01
相关资源
最近更新 更多