【问题标题】:Writing multiple sql queries in nodejs在nodejs中编写多个sql查询
【发布时间】: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 了解可能有帮助的不同方法。

标签: mysql sql node.js reactjs


【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-16
      • 1970-01-01
      • 2020-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多