MySQL中的动态搜索查询

时间:2017-07-10 07:09:20

标签: php mysql node.js database knex.js

这是项目安装:
1. Nodejs 服务器端环境
2. MySQL数据库(使用Knexjs查询构建器)
3. 'locations'数据库中的表格,其中包含'country', 'city', 'category', 'working_hours'等字段 4.表单输入,用户可以选择所有这些值并提交搜索。当用户不选择任何内容时,默认为“全部”。我需要过滤数据库并选择与用户搜索输入相对应的行。

我试着这样做:

knex('locations').where({
   country: countryInput,
   city: cityInput,
   category: categoryInput,
   working_hours: hoursInput
   })
   .then(function(rows) {.....})
   .catch(function(err) {.....});

如果用户选择所有输入字段,如果用户只选择其中一些字段而其他字段设置为全部输入字段,则该功能很好用。如何使这项工作?

提前谢谢!

2 个答案:

答案 0 :(得分:3)

这是非常常见的解决方案:

let query = knex('locations');

if (countryInput) {
  query = query.where('country', countryInput);
}

if (cityInput) {
  query = query.where('city', cityInput);
}

if (categoryInput) {
  query = query.where('category', categoryInput);
}

if (hoursInput) {
  query = query.where('working_hours', hoursInput);
}

query
  .then(function(rows) {.....})
  .catch(function(err) {.....});

答案 1 :(得分:0)

您可以使用Modify

修改查询

期望req.query对象与您的table列匹配 -

knex('locations')
        .modify(function(queryBuilder) {
            if (req.query) {
                queryBuilder.where(req.query);
            }
        }) 
   .then(function(rows) {.....})
   .catch(function(err) {.....});
  好吧,有一些潜在的风险。您需要先过滤查询。