我以前的问题不是对我的问题一个清晰的想法,这就是为什么我要问一个新问题。
这是我的表结构
id,
subject (varchar),
category(varchar),
medium(json),
material(json),
style(json)
用户能够基于表字段中的值搜索IE,如果用户仅选择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);
});
}
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);
});
}