我想盡可能少地組合幾個查詢。這是我正在寫的視頻遊戲。 注意 -spawn_id是在地圖上給定位置創建關卡上壞人的實體的標識。 - * from spawns包含spawn_id,產生的最大數量的壞人(數量),以及產生它們的壞人的類型(mob_id)以及產生它們的ID和告訴它產生什麼類型的壞人 遊戲是在線,所以我寧願儘量減少查詢的數量MYSQL優化組合查詢
這將是很好,如果我可以從數量(遊戲中的最大數量)中減去計數(遊戲中已有數字),其中產卵ID是相同的,並返回所有在一起
甚至會更好,如果我能作爲一個行一起返回產卵量ID產卵和壞人的型像這樣
SELECT spawn_id在,COUN T(*)作爲 '計數' FROM game_moblist GROUP BY spawn_id在」 回報......
spawn_id count
======== =====
1 2
表產卵包含
spawn_id quantity mob_id level
======== ======== ====== =====
1 5 1 2
mob_id poitns到具有
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意味着統計數字是存儲在「小怪」表中的數字的兩倍
這是我的代碼到目前爲止我可以完成它,但我寧願嘗試減少查詢的次數。
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
}
}
}
}
}
});
});
我在數量上添加了一個括號,並更改了一個表spawn_contains以產生 SELECT spawn_id,( 數量 - COUNT(game_moblist.spawn_id) )AS quantity_to_spawn,怪物。 * 從產卵 LEFT JOIN小怪 使用(mob_id) LEFT JOIN game_moblist 使用(spawn_id在) GROUP BY spawn_id在 LIMIT 0,30 謝謝你,真的幫了我瞭解一些的MySQL我是太不熟悉。 – Shawn