我需要一个查询来阻止产生1.34218E + 35结果的连接!我有一个表item
(约8K项目;例如Foo的盾牌,武器的酒吧),每个项目是9个不同的item_type
(护甲,武器等)之一。每个物品在item_attribute
(例如伤害,防御)中有多个条目。下面是一个伪代码表示:避免庞大的中间查询连接结果(1.33615E + 35行)
Table item (
item_id autoincrement,
...
item_type_id char, --- e.g. Armor, Weapon, etc
level int --- Must be at least this level to wear this item
);
Table item_attribute (
item_id int references item(item_id),
...
attribute char --- e.g. Damage, Defense, etc
amount int --- e.g. 100
)
现在,一个字符一次穿9个总项目(每个装甲,武器,盾牌之一,等等),我称之为设置。我想建立一个设置列表,最大化属性,但具有另一个属性的最小。举个例子来说:对于一个角色等级100,出现前十个受损伤的装备,其中sum(defense of all items) >= 100
。
天真的方法是:
select top 10
q1.item_id,q2.item_id,q3.item_id,..., q1.damage+q2.damage+q3.damage... as damage
from
(select item_id from item where item_type = 'Armor'
and level <= 100) as q1
inner join (select item_id from item where item_type = 'Shield'
and level <= 100) as q2 on 1 = 1
inner join (select item_id from item where item_type = 'Weapon'
and level <= 100) as q3 on 1 = 1
...
where
q1.defense+q2.defense+q3.defense+... >= 100
order by
q1.damage+q2.damage+q3.damage,... descending
但是,因为有在item
大约8K项,这意味着结果为DBMS需要整理的幅度接近8000^9 = 1.34218E + 35不同的设置!有没有更好的办法?
你是魔兽世界的开发者么? 8K项目! OMFG – 2010-09-16 21:32:57
这可能是玩家应该做的任务(根据你的规则优化他/她的装备)?不管他们想要什么,他们解决问题;你只是执行规则。 – John 2010-09-16 21:53:40
8K物品并不难获得。每个类型少于900个项目,其中许多项目可能以编程方式生成。 – corsiKa 2010-09-16 21:54:18