【发布时间】:2012-06-28 02:52:57
【问题描述】:
我想将几个查询组合成尽可能少的。这是我正在写的一个视频游戏。 笔记 -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
TABLE 生成包含
spawn_id quantity mob_id level
======== ======== ====== =====
1 5 1 2
mob_id 指向拥有的 TABLE mobs
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
}
}
}
}
}
});
});
【问题讨论】: