在nodejs中编写多个sql查询

Posted

技术标签:

【中文标题】在nodejs中编写多个sql查询【英文标题】:Writing multiple sql queries in nodejs 【发布时间】:2019-07-25 03:03:11 【问题描述】:

我想显示数据库中两个表的所有值,并将其显示为 console.log。如果我在 var sql 中编写一个查询并将其显示为 console.log(results) 它可以工作,但不适用于多个查询。

 var express = require('express');
    var app = express();

    let mysql = require('mysql')

    let connection = mysql.createConnection(
        host: 'localhost',
        user: 'root',
        password: '',
        database: 'pitch_perfect_db2',
        multipleStatements: true
    )


    app.get('/',(req, res) => 
        connection.connect();
        var sql = 'SELECT * FROM investors?; SELECT * FROM member_info?;'
        connection.query(sql, function(err, results, fields)
            if (!err) 
                // res.send(JSON.stringify(results[0]));
                // res.send(JSON.stringify(results[1]));
                console.log('hey');
                //console.log(results);
                console.log(results[0]);
                console.log(results[1]);

               else
                console.log('Error while performing query.');
            
        );
        connection.end();
    )

    //app.listen(port, () => console.log('Server Started pn port $port'));
    app.listen(3002);

【问题讨论】:

请参阅post 了解可能有帮助的不同方法。 【参考方案1】:

我能够让它工作,但我必须做两件事:

首先我重命名了表以删除问号,因为它总是被转换为“1”,并且表名不再与数据库中的匹配。

其次,我在connection.query() 中添加了一个数组。之后它工作得很好。

更多信息here

var express = require('express');
var app = express();

let mysql = require('mysql')

let connection = mysql.createConnection(
    host: 'localhost',
    user: 'root',
    password: '',
    database: 'pitch_perfect_db2',
    multipleStatements: true
)


app.get('/',(req, res) => 
    connection.connect();
    var sql = 'SELECT * FROM investors; SELECT * FROM member_info;';
    //var sql = 'SELECT * FROM investors;';
    connection.query(sql, [1, 2], function(err, results, fields)
        if (!err) 

            res.send(JSON.stringify(results[0]) + JSON.stringify(results[1]));

            console.log('hey');
            //console.log(results);
            console.log(results[0]);
            console.log(results[1]);

           else
            console.log('Error while performing query.');
            console.log(err);
        
    );
    connection.end();
)

//app.listen(port, () => console.log('Server Started pn port $port'));
app.listen(3002);

【讨论】:

【参考方案2】:

在节点中,您不会在 sql 语句中使用 ;。假设investorsmember_info 表的列数相同,您将需要使用这个:

var sql = 'SELECT * FROM investors UNION ALL SELECT * FROM member_info';

或者,如果 investorsmember_info 是不相关的表,您将需要进入 回调地狱 以获得所需的内容:

app.get('/',(req, res) => 
    connection.connect();
    var sql1 = 'SELECT * FROM investors';
    var sql2 = 'SELECT * FROM member_info?';
    connection.query(sql1, function(err, investors)
        if (err) throw err; //you should use this for error handling when in a development environment
        console.log(investors); //this should print

        connection.query(sql2, function(err, members) 
            if (err) throw err;
            console.log(members);

            res.render('your view', investors:investors, members:members);
        );  
    );
);

如果您决定采用后一种方法,我会敦促您重新考虑您的数据库布局。

如果您的示例中的任何一个表之间存在外键关系,您应该肯定在这些表上使用某种JOIN 语句,而不是UNION

【讨论】:

以上是关于在nodejs中编写多个sql查询的主要内容,如果未能解决你的问题,请参考以下文章

书架中的SQL过滤器查询作为nodejs中的Laravel

编写 SQL 查询时遇到问题

是否可以在 ydn-db 中编写类似于 SQL“IN”或多个“AND”子句的查询?

SQL查询在同一张发票中选择多个产品

如何编写涉及多个选择的 Oracle SQL 查询

如何防止nodejs中的sql注入和续集? [关闭]