My previous question没有明确提出我的问题,这就是我提出新问题的原因。
这是我的表结构
id,
subject (varchar),
category(varchar),
medium(json),
material(json),
style(json)
用户可以根据表字段中的值进行搜索,即用户是否仅选择subject
(他可以从多个选择下拉列表中选择)查询结果中包含与所选项匹配的行。
如果用户选择的主题和类别查询结果包含与所选项目匹配的行等等(简而言之,它是一个过滤搜索,如购物网站)
问题是我不知道如何基于这些输入有效地构建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
)
{
"subject":["test","test1"],
"medium":["paper","wood"],
"category":"",
"material":"",
"style":""
}
注意:输入和输出是JSON(REST API)
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);
});
}
答案 0 :(得分:0)
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);
});
}