0
SQLクエリから返されたデータをそれぞれのテーブルに分割するために、以下のコードで 'nestTables'オプションを使用しています。私はまた、プライマリテーブルに含める計算されたフィールドをクエリに含めます。例としてMySQL用のnestTablesオプション付き計算フィールドNodeJSでのクエリ
は、私は次のルート実行午前:
router.route('/person/:personId').get(function(req,res){
var person_id = req.params.personId;
db.getConnection(function(err, connection) {
if (err) {
return res.status(503).send({ result: false, error: 'CONNECTION error: ' + err.code});
} else {
var sqlString='SELECT *, someField - 1 as calculated FROM person LEFT JOIN person_status ON person.id = person_status.person_id WHERE person.id = ' + person_id;
var options={sql:sqlString,nestTables:true};
connection.query(options, function(error, rows, fields) {
connection.release();
var nestingOptions = [
{tableName: 'person', pkey:'id'},
{tableName: 'person_status', pkey:'id', fkeys:[{table:'person',col:'person_id'}]}
];
if (error) {
return res.status(500).send({ result: false, error: 'QUERY ERROR: ' + error.code});
} else {
return res.status(200).send(rows);
}
});
}
});
});
及びIは、以下のJSON応答を受信しています:
理想[
{
"person": {
"id": 1,
other person data . . .
"person_status": [
{
"id": 3,
other data . . .
}
]
},
"person_status": {
"id": 3,
other data . . .
},
"": {
"calculated": 0
}
}
]
を、私はに計算されたフィールドを含めたいです
[
{
"person": {
"id": 1,
"calculated": 0
other person data . . .
"person_status": [
{
"id": 3,
other data . . .
}
]
},
"person_status": {
"id": 3,
other data . . .
}
}
]
私が含めることができる方法はありますか計算されたフィールドをpersonテーブルに追加するか、この問題に適したより良いソリューションがありますか?
ありがとうございます!
ありがとうございますuser3173842、私は両方のケースをテストして、それらは同等に機能します。興味のないところでは、これらの方法のどれが最も効率的であると考えられるでしょうか?私は2番目の解決方法を試してみたいと思いますが、ForEachループで大きなコストがかかるかどうかはわかりません。 –
コストが比較的低いので、数百行以下を選択している場合は、測定可能な差はありません。 MySQLはおそらくもう少し効率的です。最初のオプションはデータベース側にいくつかのRAMを必要とし、2つ目はnode.js側にCPU負荷を生成するため、別個のサーバがある場合は、出力を利用できるシステムを使用する方法を選択します。同じことがいつでも簡単に切り替えることができます。 – user3173842