Node.js nodejs中的变量sqlite3查询
我正在使用node.js构建一个简单的表单,该表单要求提供您期望的内容: -名字 -姓 -地址 并使用名为firstName、lastName和address的字段对sqlite3数据库执行查询。我想混合和匹配查询,虽然-您可以搜索只是姓氏或姓氏连同姓氏或姓氏与部分街道地址,等等 为每种情况编写单独的查询会很烦人,但我不知道还能怎么做。在代码中,如果我输入名字或姓氏,则以下操作有效:Node.js nodejs中的变量sqlite3查询,node.js,sqlite,Node.js,Sqlite,我正在使用node.js构建一个简单的表单,该表单要求提供您期望的内容: -名字 -姓 -地址 并使用名为firstName、lastName和address的字段对sqlite3数据库执行查询。我想混合和匹配查询,虽然-您可以搜索只是姓氏或姓氏连同姓氏或姓氏与部分街道地址,等等 为每种情况编写单独的查询会很烦人,但我不知道还能怎么做。在代码中,如果我输入名字或姓氏,则以下操作有效: db.serialize(function() { db.each("SELECT rowid AS id
db.serialize(function() {
db.each("SELECT rowid AS id, lastName, firstName FROM county WHERE firstName = ? OR lastName = ?", firstName, lastName, function(err, row) {
console.log(row.id + ": " + row.firstName + ' ' + row.lastName);
}
}
但是,如果我输入名字和姓氏,我希望它是,而不是只返回两者匹配的行。如果我在该子句中执行AND,如果我将其中一个字段留空,它将不返回任何内容
我只是在构造查询时遗漏了一个技巧吗
谢谢 我认为最好用代码实现这一点。大概是这样的:
var sqlite3 = require('sqlite3').verbose(),
db = new sqlite3.Database('peeps.db');
var runQuery = function(request) {
var select = 'select rowid AS id, firstName, lastName from country where ',
query,
params = [];
if (request.first && request.last) {
query = select + "firstName=? and lastName=?"
params.push( request.first, request.last );
} else if (request.first) {
query = select + "firstName=?"
params.push( request.first );
} else if (request.last) {
query = select + "lastName=?"
params.push( request.last );
}
if (request.address) {
params.push( request.address );
if (!query) {
query = select + " address like ?";
} else {
query = query + " and address like ?";
}
}
db.each( query, params, function(err, row) {
console.log( 'id:', row.id, row.firstName, row.lastName );
});
};
var createTestData = function() {
var stmt = db.prepare('insert into country values (?, ?, ?)');
stmt.run('john', 'smith', '123 state street');
stmt.run('jane', 'doe', '400 doe street');
stmt.run('jeff', 'lebowski', 'dude ave, dudeville');
stmt.finalize();
};
db.serialize(function() {
db.run('create table if not exists country( firstName text, lastName text, address text )');
// createTestData();
var searches = [
{ first:'john', last:'smith' },
{ first:'jane' },
{ last:'lebowski' },
{ address:'%street%' }
];
searches.forEach(function(request) {
runQuery( request );
});
});
db.close();
这并不像我希望的那样是面向对象的,但它演示了如何为各种查询参数构造SQL语句 您必须动态构造查询(即SQL字符串和参数数组)。