【发布时间】:2020-04-23 02:03:45
【问题描述】:
我有一个表,其中有一个名为 CRS_TITLE 的列,我想在该列中搜索课程标题列表。现在我的代码一次只能处理一个参数。我想我可以编写一个简单的循环,并且在每次迭代期间,我可以使用新的类名再次调用 db.each()。我知道这种方式效率低下,所以我想一次检查所有参数。
我尝试过的事情:
1) 添加另一个“?”在 WHERE 和其他变体中。
2) 在传入参数时使用来自 javascript 的新扩展运算符,例如 [...classes]。
由于语法错误,上述方法均无效。
不管怎样,下面是我的代码。
let sqlite3 = require('sqlite3').verbose()
// open the database
let db = new sqlite3.Database('./classes.db', (err) => {
if (err) {
console.error(err.message);
}
console.log('Connected to the classes database.');
});
let sql = `SELECT CRS_CDE course_code,
Column3 start_time,
Column4 end_time
FROM spring_schedule
WHERE CRS_TITLE = ?`;
// I want to do multiple "WHERE = ?" here.
// with multiple arguments
let className1 = 'Spanish I'
// I want to change the line above to this instead.
// let classNames = ['Accounting I', 'English', 'Math'...etc]
db.each(sql, [className1]/*pass an array of items to look up instead of just 1 item.*/, (err, row) => {
if (err) {
throw err;
}
console.log(`${row.course_code} ${row.start_time} - ${row.end_time}`);
// Will use this result to update frontend.
});
// close the database connection
db.close();
已编辑:下面的工作代码。
let sql = `SELECT CRS_CDE course_code,
Column3 start_time,
Column4 end_time
FROM spring_schedule
WHERE CRS_TITLE IN `;
let classNames = ['Spanish I', 'Accounting II', 'College Algebra']
let where = '(?' + ',?'.repeat(classNames.length-1) + ')';
sql += where;
db.each(sql, [...classNames], (err, row) => {
if (err) {
throw err;
}
console.log(`${row.course_code} ${row.start_time} - ${row.end_time}`);
// Will use this result to update frontend.
});
db.close();
【问题讨论】:
-
所以您尝试将查询更新为
WHERE CRS_TITLE = ? OR CRS_TITLE = ? ...,但您说它仍然不起作用?什么是语法错误?
标签: javascript sql node.js sqlite