2012-07-11 62 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