ich habe irgendwie probleme beim berechnen der angriffe in einem query
in einer schleife die immer wieder einen query nachm nächsten erstellt ist meiner meinung einfach sch**** , denn dadurch geht der MySQL - Server zu grunde
zumindest denke das das die beste lösung wäre aber hm es funktioniert nich so wie ich es will
Die Tabelle:
CREATE TABLE `feldzug` (
`feldzug_id` int(10) unsigned NOT NULL auto_increment,
`feldzug_von_stadt_id` smallint(5) unsigned NOT NULL,
`feldzug_an_stadt_id` smallint(5) unsigned NOT NULL,
`ein_panzer` smallint(5) unsigned default NULL,
`ein_soldaten` smallint(5) unsigned default NULL,
`ein_swat` smallint(5) unsigned default NULL,
`ankunft_in` int(10) unsigned default NULL,
`zurueck_in` int(10) unsigned default NULL,
`heimweg` tinyint(1) NOT NULL default '0',
`res_kohle` smallint(5) unsigned default NULL,
`res_stein` smallint(5) unsigned default NULL,
`res_eisen` smallint(5) unsigned default NULL,
`besiegt` tinyint(1) NOT NULL default '0',
PRIMARY KEY (`feldzug_id`,`feldzug_von_stadt_id`,`feldzug_an_stadt_id`),
KEY `feldzug_FKIndex1` (`feldzug_von_stadt_id`),
KEY `feldzug_FKIndex2` (`feldzug_an_stadt_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=17 ;
Die Abfrage:
UPDATE feldzug f, staedte s1, staedte s2
SET
f.res_eisen = 0 + IF((@summe_vom_angriff < @summe_verteidigt) AND (f.heimweg
0),0,s2.res_eisen),
f.res_stein = 0 + IF((@summe_vom_angriff < @summe_verteidigt) AND (f.heimweg
0),0,s2.res_stein),
f.res_kohle = 0 + IF((@summe_vom_angriff < @summe_verteidigt) AND (f.heimweg
0),0,s2.res_kohle),
f.heimweg = IF((@summe_vom_angriff < @summe_verteidigt) AND (f.heimweg
0),0,1),
f.besiegt = IF((@summe_vom_angriff < @summe_verteidigt) AND (f.heimweg
0),1,0),
s1.res_eisen = s1.res_eisen + IF(f.heimweg=1,f.res_eisen,0),
s1.res_stein = s1.res_stein + IF(f.heimweg=1,f.res_stein,0),
s1.res_kohle = s1.res_kohle + IF(f.heimweg=1,f.res_kohle,0),
s1.ein_soldaten = s1.ein_soldaten + IF(f.heimweg=1,f.ein_soldaten,0),
s1.ein_swat = s1.ein_swat + IF(f.heimweg=1,f.ein_swat,0),
s1.ein_panzer = s1.ein_panzer + IF(f.heimweg=1,f.ein_panzer,0)
WHERE
s1.stadt_id = f.feldzug_von_stadt_id
AND s2.stadt_id = f.feldzug_an_stadt_id
AND f.besiegt = 0
AND ((f.ankunft_in < '$jetzt') OR (f.zurueck_in < '$jetzt'))
AND (@angriffswert := (f.ein_soldaten*15)+(f.ein_panzer*50)+(f.ein_swat*35))
AND (@verteidswert := (f.ein_soldaten*23)+(f.ein_panzer*50)+(f.ein_swat*35))
AND (@summe_vom_angriff := @angriffswert + @verteidswert)
AND (@aS := (s2.ein_soldaten*15)+(s2.ein_panzer*50)+(s2.ein_swat*35))
AND (@vS := (s2.ein_soldaten*23)+(s2.ein_panzer*50)+(s2.ein_swat*35))
AND (@summe_verteidigt := @aS + @vS + (s2.geb_mauer*16))
Die Variable $jetzt beinhaltet dann immer den aktuellen Timestamp
Ich weiß nicht was daran falsch ist , zumindest wird kein fehler ausgegeben
Habe ich ganz falsch angefangen mit dem "Angreifen" oder wie ihr es nennen wollt^^
Oder ne bessere Frage wie habt ihr es in einem Echtzeit-Strategie-BG realisiert bzw wie würdet ihr es realisieren?
Mit freundlichen Grüßen,
Eugen Bolz