首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于用户输入的Mysql筛选查询

基于用户输入的Mysql筛选查询
EN

Stack Overflow用户
提问于 2017-04-27 06:13:17
回答 1查看 2.8K关注 0票数 1

My previous question对我的问题没有给出一个清晰的想法,这就是为什么我要问一个新的问题。

这是我的桌子结构

代码语言:javascript
运行
复制
id,
subject (varchar),
category(varchar),
medium(json),
material(json),
style(json)

用户可以根据表字段中的值进行搜索,也就是说,如果用户只选择subject (他可以从多个select下拉列表中选择它),查询结果包含与所选项匹配的行。

如果用户选择的主题和类别查询结果包含与所选项目相匹配的行,等等(简而言之,这是一个过滤器搜索,就像购物网站一样)

问题是,我不知道如何根据这些输入高效地构建MySQL查询,因为有些Mysql列是JSON。

下面是单独的SQL查询:

代码语言:javascript
运行
复制
// select rows that contains subject test or test1
SELECT * 
FROM `cushbu_art` 
WHERE subject IN ('test','test1')

// select rows that contains medium is paper or food
SELECT * 
FROM `cushbu_art` 
WHERE (JSON_CONTAINS(medium, '["paper"]') 
       OR JSON_CONTAINS(medium, '["food"]'))

下面是一个包含两个参数的示例输入(subjectmedium)

代码语言:javascript
运行
复制
{
    "subject":["test","test1"],
    "medium":["paper","wood"],
    "category":"",
    "material":"",
    "style":""
}

注意:输入和输出都是JSON (REST )

db.js

代码语言:javascript
运行
复制
function(req, res) {
    var sql = '';

    if(req.body.subject) {
        sql+=//PREPARE SUBJECT QUERY
    }

    if(req.body.medium) {
       sql+=//PREPARE QUERY
    }

    //FINAL SQL QUERY HERE;
    db.query(sql, function(error, result) {
       console.log(result);
    });
}
EN

回答 1

Stack Overflow用户

发布于 2017-04-27 09:14:38

代码语言:javascript
运行
复制
function(req,res){
 var sql = 'SELECT * FROM `cushbu_art`';

 //Check if only on is set
 if(req.body.subject && !req.body.medium){
  var subjectJoin=req.body.subject.join(',');
  sql+='WHERE subject IN ('+subjectJoin+')';

}

 //Check if only on is set 
if(req.body.medium && !req.body.subject){
      sql+='WHERE (JSON_CONTAINS(medium,'+req.body.medium[0]+') OR JSON_CONTAINS(medium,'+req.body.medium[1]+')';
}

if(req.body.medium && req.body.subject){

 var subjectJoin=req.body.subject.join(',');

 sql+='WHERE subject IN ('+subjectJoin+') AND (JSON_CONTAINS(medium,'+req.body.medium[0]+') OR JSON_CONTAINS(medium,'+req.body.medium[1]+')';

}

  //FINAL SQL QUERY HERE';
  db.query(sql,function(error,result){
   console.log(result);
 });

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43649925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档