Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySql表单查询过滤器或忽略NodeJS中列值的WHERE子句_Mysql_Node.js - Fatal编程技术网

MySql表单查询过滤器或忽略NodeJS中列值的WHERE子句

MySql表单查询过滤器或忽略NodeJS中列值的WHERE子句,mysql,node.js,Mysql,Node.js,我正在尝试获取一个用户列表,其中性别、地区和状态是我应用程序中的强制过滤器。当性别为0或1时,筛选工作正常。问题是当我两者都需要的时候。所有3个过滤器的情况相同 API:https://website.com/api/getUsers?gender=0®ion=1&status=1以获取筛选结果 方法1:我想为这些api参数传递一些东西,例如:gender=#$%,以便在下面的queryInputs上传递时忽略WHERE子句 module.exports.getMatches = ({of

我正在尝试获取一个用户列表,其中性别、地区和状态是我应用程序中的强制过滤器。当性别为0或1时,筛选工作正常。问题是当我两者都需要的时候。所有3个过滤器的情况相同

API:
https://website.com/api/getUsers?gender=0®ion=1&status=1
以获取筛选结果

方法1:我想为这些api参数传递一些东西,例如:gender=#$%,以便在下面的queryInputs上传递时忽略WHERE子句

module.exports.getMatches = ({offset, gender, status, region}, callback) => {
var dbQuery = 'SELECT * from `users` WHERE `gender` = ? AND `status` = ? AND `region` = ? LIMIT ? OFFSET ?';
var queryInputs = [parseInt(gender), parseInt(status), parseInt(region), 10, parseInt(offset)];

db.query(dbQuery, queryInputs, function(err, result) {
    //code goes here
});
}
方法2:我将传递空参数进行验证,以获取特定过滤器的所有数据,例如
https://website.com/api/getUsers?gender=®ion=1&status=

我试图避免在api中传递空参数时使用WHERE子句。如果不是查询中的最后一个和之前的限制,这几乎对我有效

module.exports.getMatches = ({offset, gender, status, region}, callback) => {
var dbQuery = 'SELECT * from `users`';
if( gender != '' || status!= '' || region != '') dbQuery += ' WHERE'
if(gender != ''){
    dbQuery += ' `gender` = '+ db.escape(parseInt(gender))+' AND';
}
if(status != ''){
    dbQuery += ' `status` = '+ db.escape(parseInt(status))+' AND';
}
if(region != ''){
    dbQuery += ' `region` = '+ db.escape(parseInt(region))+' AND';
}
dbQuery += ' LIMIT 10 OFFSET ' + db.escape(parseInt(offset));

db.query(dbQuery, queryInputs, function(err, result) {
    //code goes here
});
}

在这两种方法中,任何人的解决方案都适用于我。

根据最佳实践,如果您想获取所有用户,您可以遵循以下方法:

1:创建一个带有分页的新API(/allUsers),并为此API创建一个单独的SQL语句,在这里不需要添加筛选子句


2:在现有API中添加验证检查,如果没有参数,则不要应用过滤器,否则将照常应用。

这里是第二种方法的编辑。这应该允许您在查询添加之前添加“AND”,以避免声明的错误

module.exports.getMatches = ({offset, gender, status, region}, callback) => {
var dbQuery = 'SELECT * from `users` WHERE 1=1 ';
//if( gender != '' || status!= '' || region != '') dbQuery += ' WHERE'
if(gender != ''){
    dbQuery += 'AND `gender` = '+ db.escape(parseInt(gender));
}
if(status != ''){
    dbQuery += 'AND `status` = '+ db.escape(parseInt(status));
}
if(region != ''){
    dbQuery += 'AND `region` = '+ db.escape(parseInt(region));
}
dbQuery += ' LIMIT 10 OFFSET ' + db.escape(parseInt(offset));

db.query(dbQuery, queryInputs, function(err, result) {
    //code goes here
});
}

感谢您的帮助和时间在这里回答。但是,我试图避免编写多个查询,并通过单个查询获得所需的输出。单个查询将非常复杂,传递param empty并不能解决您的问题