2017-12-27 21 views
0

私はnodejsでmysqlを使用しようとしています:クエリを実行しようとしています:select count(*) from TABLE。私が唯一の答えとして、33をしたい単純なNodejs MySQLクエリ

[ RowDataPacket { 'count(*)': 33 } ]

として 結果が出てくる、そう

var express = require('express'); 
 
var router = express.Router(); 
 
var mysql = require('mysql'); 
 

 
var con = mysql.createConnection({ 
 
    host: "localhost", 
 
    user: "honolulu", 
 
    password: "honolulu", 
 
    database: "db" 
 
}); 
 

 

 
con.connect(function(err) { 
 
    if (err) throw err; 
 
    console.log("Connected to question database file 1!"); 
 
}); 
 
var but=20 
 
con.query('select count(*) from qpsc',function (err, result) { 
 
    if (err) throw err; 
 
    but=result; 
 
    console.log(but); 
 
    }); 
 
/* GET home page. */ 
 
router.get('/', function(req, res, next) { 
 
    res.render('index', { title: 'Express' }); 
 
}); 
 
router.get('/file', function(req, res, next) { 
 
    res.render('index2',{ num_buttons: '20'}); 
 
    // console.log("RENDERED FROM INDEX.js"); 
 
}); 
 

 
module.exports = router;

を次のようにJavaScriptのスケルトンコードは、私が何をすべきでしょうか? 助けてください。

答えて

1

あなたの結果変数がありますクエリで選択された各フィールドのキーを持つオブジェクトの配列。

あなたはおそらくresult[0]["count(*)"]のエントリであなたのカウントを見つけるでしょうが、それは醜いです。

私はそれがよりエレガントにするために、あなたのSQLクエリでエイリアスを使用することをお勧めします:あなたはフィールドの名前を変更する場合

var yourCount = result[0].many; 
2

結果があるので:あなたはで33を得ることができます

[ RowDataPacket { 'count(*)': 33 } ] 

:だから

var theCount = result[0]['count(*)']; 

あなたのコードは、適応、それは次のようになります。

con.query('select count(*) from qpsc',function (err, result) { 
    if (err) throw err; 
    but = result[0]['count(*)']; 
    console.log(but); 
}); 
0

select count(*) as many from qpsc 

その方法は、あなたがこのようなあなたの数を取得することができますSQLクエリでは、それらをプロパティとしてアクセスできます。したがって、"select count(*) AS 'result' from TABLE";を使用すると、row.resultまたはSQLクエリ内で使用する他の名前として33にアクセスできます。

私が通常やっているのは、要求するすべてのSQLフィールドのエイリアスです。その後、すべての行を配列にプッシュし、その配列をObject.assignでマップしてすべてのRowDataPacketsをプレーンオブジェクトに変換します。

私はmysqlのモジュールを使用するには、次の構造を使用し

const NOOP =() => {}; 
const server = { 
    "host" : "localhost", 
    "user" : "honolulu", 
    "password" : "honolulu", 
    "database" : "db" 
}; 
const connection = MYSQL.createConnection(server); 
connection.connect(error => { 
    if (error) { 
     // handle error 
    } 
    // else NOOP(); 
}); 
const sql = "select count(*) AS 'result' from TABLE"; 
const query = connection.query(sql); 
const resultSet = []; 
query.on('error', error => { 
    // handle query error 
}); 
// Incoming field packets, if any, preceding the resultSet rows. No operation. 
query.on('fields', NOOP); 
// Every time a row gets returned, this handler is triggered. 
query.on('result', row => resultSet.push(row)); 
// All rows have been returned 
query.on('end',() => { 
    // do something with the resultSet. 
});