node.js在mysql中进行多个字段模糊查询| 青训营笔记

514 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第5天

今天在做仿掘金项目中遇到了问题,怎么在sql数据库中查询与多个字段相匹配的数据。现分享笔记如下:

mysql中的多个字段模糊查询

有这样一个需求,sql表格如下:

sqldemo.jpg

其中的keywords列的数据格式是一个字符串,关键词用逗号隔开,前端返回的查询关键词如下:

arr = ['前端','JavaScript','Vue.js','React.js','CSS','面试','TypeScript','后端','Node.js','前端框架','算法','Webpack','架构','微信小程序','Android']

我们要做的是查询与arr数组中的某一个关键词相匹配的sql中的keywords,即多对多查询。

怎么解决呢?在这里我用的是正则表达式方法,mysql的正则表达式用法如下:

SELECT * FROM table WHERE table.article REGEXP '前端';

这里的table.article即是多个关键词,“前端”是一个关键词,实现多对多很简单,我们可以把多个关键词用|分开,实例如下:

SELECT * FROM table WHERE table.article REGEXP '前端|JAVA|CSS|面试';

下面分享一下查询流程:

1.前端传入查询关键词:

let keywords = ['前端','JavaScript','Vue.js','React.js','CSS','面试','TypeScript','后端','Node.js','前端框架','算法','Webpack','架构','微信小程序','Android']

axios.post('/xxx', { keywords: keywords }).then(res =>{return res}).catch(err => console.log(err))

2.node.js进行数据处理

const mysql = require('mysql');
//创建数据库
var db = mysql.createConnection({
    host:'localhost', port:3306, user:'root', password:'123456', database:'demo'
});
//创建关键词  这里我用res.body.keywords表示前端传来的关键词
let keywords = res.body.keywords.join('|') //用分号隔开,作为sql正则表达式语句
//创建查询语句
let querySql = `SELECT * FROM table WHERE table.article REGEXP ${keywords};`
//进行查询。
db.query(querySql, (err,data)=>{
    if(err){
        console.log('error',err)
    }else {
        console.log('成功了')
    }
})

至此,一个简单的sql多字段模糊查询就完成了,当然,实际项目中不仅仅是这么一点代码,还需要创建连接池、增加查询条件、对查询结果进行排序等等,所以要学习的东西还很多!