私は今、少しばかげていると感じています。私はnodejsとjavaScriptにかなり慣れていないので、これを理解できません。mysqlへのクエリの非同期の性質のためだと思います...
私の問題を示す例を作成しました。多数のSQLクエリを循環させて、結果を処理したいだけです。例のために、私はただ印刷します。このような単一の SQL クエリを使用できることはわかっています"SELECT id, name FROM player WHERE id IN (1,2,3,4,5)"
が、これは、作成しようとしている実際のアプリケーションでは不可能です。
これは私のnodejs app.jsの関連部分です
var mysql = require("mysql");
var mysqlPool = mysql.createPool(conf.mysqlArbData);
for (var i = 0; i<5; i++){
mysqlPool.getConnection(function(err, connection) {
var detailSql = "SELECT id, name FROM player " +
"WHERE id = "+i;
if (err){
throw err;
}
connection.query(detailSql, function(err, detailRows, fields) {
connection.end();
console.log("detailSql="+detailSql);
if (err){
console.log("can't run query=" + detailSql +"\n Error="+err);
}
else{
console.log(detailRows[0].id + " " +detailRows[0].name);
}
});
});
};
出力は次のとおりです。
web server listening on port 3000 in development mode
detailSql=SELECT id, name FROM player WHERE id = 5
5 Jyvaskyla
detailSql=SELECT id, name FROM player WHERE id = 5
5 Jyvaskyla
detailSql=SELECT id, name FROM player WHERE id = 5
5 Jyvaskyla
detailSql=SELECT id, name FROM player WHERE id = 5
5 Jyvaskyla
detailSql=SELECT id, name FROM player WHERE id = 5
5 Jyvaskyla
私の質問は、id=5 のデータベース エントリの結果しか得られないのはなぜですか? コールバックで個々の結果を受け取るには、何を変更する必要がありますか?