我想将几个查询组合成尽可能少的。这是我正在写的一个视频游戏。注意 -spawn_id 是在地图上给定位置的关卡上创建坏人的实体的 ID。-* 来自 spawns 包括 spawn_id、要生成的坏人的最大数量(数量)、要生成的坏人类型(mob_id)以及一个 ID,告诉它要生成的坏人类型 游戏在线所以我宁愿尽量减少查询的数量
如果我可以从生成 ID 相同的数量(游戏中的最大数量)中减去计数(游戏中已经存在的数量)并将其全部返回,那就太好了
如果我可以像这样将生成的生成ID数量和坏人的类型一起返回,那就更好了
SELECT spawn_id, COUNT(*) as 'count' FROM game_moblist GROUP BY spawn_id" 返回...
spawn_id count
======== =====
1 2
表生成包含
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
这意味着我必须插入从小怪中选择的 3 行,我不介意对其进行第二次查询,这样我就可以将统计数据逐级相乘,以在游戏中创建一个 2 级的坏人......基本上 2 级意味着统计数据是是“mobs”表中存储的数字的两倍
这是我的代码,到目前为止我可以完成它,但我宁愿先尝试减少查询的数量。
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
}
}
}
}
}
});
});