いくつかのクエリをできるだけ少なくしたいと思います。これは私が書いているビデオゲーム用です。注-spawn_idは、マップ上の特定の場所のレベルに悪者を作成するエンティティのIDです。-*スポーンからは、spawn_id、スポーンする悪者の最大数(quantity)、スポーンする悪者のタイプ(mob_id)、およびゲームをスポーンする悪者のタイプを示すIDが含まれます。したがって、Idはクエリの数を最小限に抑えます
スポーンIDが同じである量(ゲーム内にある最大量)からカウント(すでにゲーム内にある数)を差し引いて、それをすべて一緒に返すことができれば素晴らしいでしょう
スポーンIDの量と悪者のタイプを、このように1つの行として一緒に返すことができれば、さらに良いでしょう。
SELECT spawn_id、COUNT(*)as'count' FROM game_moblist GROUP BYspawn_id"は...を返します。
spawn_id count
======== =====
1 2
TABLEスポーンには
spawn_id quantity mob_id level
======== ======== ====== =====
1 5 1 2
mob_idは、
mob_id ...stats for mob_id
====== ===================
1 unique stats for mob#1
私はこのようなものを返したいです:
spawn_id quantity_to_spawn mob_id ...stats for mob_id
======== ================= ======
1 3 1 unique stats for mob#1
つまり、2番目のクエリを実行してもかまわないmobから選択した3行を挿入する必要があります。これにより、統計をレベルで乗算して、レベル2の悪者をゲームに作成できます...基本的にレベル2は、統計が'mobs'テーブルに格納されている数の2倍
これまでのところ、コードを完成させることができましたが、最初にクエリの数を減らしたいと思います。
sql= "SELECT spawn_id, COUNT(*) as 'count' FROM game_moblist GROUP BY spawn_id"
connection.query(sql, function(err, spawncount, fields) {
sql= "SELECT * FROM spawns"
connection.query(sql, function(err, spawns, fields) {
for (i=0;i<spawns.length;i++){
if (spawns[i].next_spawn < new Date().getTime()){
for (j=0;spawncount.length;j++){
if (spawncount[j].spawn_id ==spawns[i].spawn_id&&spawncount[j].count<spawns[i].quantity){
quantity_to_spawn = spawns[i].quantity -spawncount[j].count
//fetch spawns[i].mob_id mob from mobs table
for(k=0;k<quantity_to_spawn;k++){
//multiply for level
//insert into moblist
}
}
}
}
}
});
});