Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js nodejs中的变量sqlite3查询_Node.js_Sqlite - Fatal编程技术网

Node.js nodejs中的变量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

我正在使用node.js构建一个简单的表单,该表单要求提供您期望的内容: -名字 -姓 -地址

并使用名为firstName、lastName和address的字段对sqlite3数据库执行查询。我想混合和匹配查询,虽然-您可以搜索只是姓氏或姓氏连同姓氏或姓氏与部分街道地址,等等

为每种情况编写单独的查询会很烦人,但我不知道还能怎么做。在代码中,如果我输入名字或姓氏,则以下操作有效:

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字符串和参数数组)。