基于用户输入的Mysql过滤查询
我没有对我的问题给出一个清晰的想法,这就是为什么我要问一个新问题 这是我的桌子结构基于用户输入的Mysql过滤查询,mysql,node.js,rest,express,Mysql,Node.js,Rest,Express,我没有对我的问题给出一个清晰的想法,这就是为什么我要问一个新问题 这是我的桌子结构 id, subject (varchar), category(varchar), medium(json), material(json), style(json) 用户可以基于表字段中的值进行搜索,即如果用户仅选择主题(他可以从多个选择下拉列表中选择),则查询结果包含与所选项目匹配的行 如果用户选择的主题和类别查询结果包含与所选项目匹配的行,等等(简而言之,这是一个类似于购物网站的筛选搜索) 问题是我不知道
id,
subject (varchar),
category(varchar),
medium(json),
material(json),
style(json)
用户可以基于表字段中的值进行搜索,即如果用户仅选择主题
(他可以从多个选择下拉列表中选择),则查询结果包含与所选项目匹配的行
如果用户选择的主题和类别查询结果包含与所选项目匹配的行,等等(简而言之,这是一个类似于购物网站的筛选搜索)
问题是我不知道如何基于这些输入高效地构建MySQL查询,因为有些MySQL列是JSON
以下是单独的SQL查询:
// 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"]'))
这是一个带有两个参数的示例输入(subject
和medium
)
注意:输入和输出是JSON(RESTAPI)格式的
db.js
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);
});
}
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);
});
}
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);
});
}