2012-07-11 81 views
0

我的問題涉及到我在遊戲中寫的一個遊戲項目,壞人的屍體和硬幣落在一個特定的x,y座標的地面上,當一組物品在遊戲將顯示一個寶藏圖標。它的重要性在於我計算了多少個玩家,如果玩家把它們全部拿走,它將被移除。還有其他方法可以做到這一點,但我使用的方法很適合我的應用程序。Mysql左加入計數

所以我需要在x,y,land域上連接3個表格並計算每個組合的出現次數,並將硬幣存儲爲它們的值,所以我想要計算每個硬幣(換句話說,增加數值),所以我有表如下 所有表中POSX,花束,土地被grounped爲 表名:game_coins 領域:POSX,花束,土地,價值< - 算作#存儲在值

table name: game_items 
fields: posx, posy, land, item_id <--counts as 1 


table name: game_corpses 
fields: posx, posy, land, id <-- counts as 1 

這裏是我到目前爲止使用的查詢,我得到一個模糊的錯誤,我知道這意味着什麼,但似乎我應該能夠調用所有具有1列名稱的表,如果他們是相同和我正在按該列分組

SELECT posx, posy, land, COUNT(*) as 'count' 
FROM game_itemlist 
LEFT JOIN game_corpses ON posx, posy, land 
LEFT JOIN game_coins ON posx,posy,land 
WHERE land = 'test' GROUP BY posx, posy, land 

我可以增加值來計算後綴,但我無法得到左連接正確。

回答

2

這不是一個真正的JOIN。並非每個game_item都與一組特定的game_corpses有關;這只是你計算的兩套東西。

一個UNION可能更合適:

SELECT COUNT(1) FROM 
(
SELECT * FROM game_items WHERE ... 
UNION 
SELECT * FROM game_corpses WHERE ... 
) 

取決於你正在做的怎麼這麼多,你可以通過這兩個表合併成一個具有指示是否它是一個項目或一個屍體的字段中受益。

+0

我會研究一下這個真正的快速這是一個很好的建議 – Shawn 2012-07-11 14:38:59

+0

這是一個好主意,我想我會這樣做。有沒有一種方法可以增加數值,但是當x,y,land匹配時呢? – Shawn 2012-07-11 14:50:52

+0

聽起來像'SUM(價值)'是你所追求的,但很難從你說明的模式部分中知道。 – VoteyDisciple 2012-07-12 17:34:57