Я пытаюсь получить список пользователей, в котором пол, регион и статус являются обязательными фильтрами в моем приложении. Фильтрация работает нормально, когда пол равен 0 или 1. Проблема в том, что мне нужны оба. Сценарий одинаков для всех 3 фильтров.
API: https://website.com/api/getUsers?gender=0®ion=1&status=1
для получения результатов фильтра.
ПОДХОД 1: Я хочу передать что-то для этих параметров api, например . гендер = # $%, так что он игнорирует его предложение WHERE при передаче его в queryInputs ниже.
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=
Я пытаюсь избежать предложения WHERE, если я передаю пустые параметры в api. Это почти сработало для меня, если бы в запросе не было последнего И перед LIMIT.
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
});
}
Среди этих двух подходов решение для всех работает для меня.