![]() |
Datenbank: MySQL • Version: 5 • Zugriff über: PHP
UPDATE Statement vereinfachen
Hallo,
ich programmiere zur Zeit ein Browsergame, genauer einen Fussballmanager. Aktuell möchte ich die Berechnungen des Trainings machen. Ich hab das jetzt alles in ein SQL-UPDATE Statement gepackt:
SQL-Code:
Ich hab die zwar nochnicht getestet, aber die müsste wohl so aussehen.
update players as p1 SET
p1.skill1=p1.skill1*(select t1skill1 from team_training where team=p1.team), p1.skill2=p1.skill2*(select t1skill2 from team_training where team=p1.team), p1.skill3=p1.skill3*(select t1skill3 from team_training where team=p1.team), p1.skill4=p1.skill4*(select t1skill4 from team_training where team=p1.team), p1.skill5=p1.skill5*(select t1skill5 from team_training where team=p1.team), p1.skill6=p1.skill6*(select t1skill6 from team_training where team=p1.team) where p1.team>'0' Was mir nicht gefällt sind die 6 subselects. Kann ich in nem Update nicht diese andere Tabelle joinen? Es geht immerhin um knapp 40.000 DS ind er Tabelle players und knapp 4.000 in der tabelle team_training :? Edit: Mir iss grad eingefallen das bei den Spielern das Team nicht direkt dabei steht :oops: Vereinfach habe ich das auch, mit einem Join:
SQL-Code:
Ich habe ds ausgeführt und es funktioniert zumindest mal..
update players as p1 left outer join player_contracts as c1 on c1.player=p1.id and c1.ende=0 left outer join team_training as t1 on t1.team=c1.team SET
p1.skill1=p1.skill1*t1.t1skill1, p1.skill2=p1.skill2*t1.t1skill2, p1.skill3=p1.skill3*t1.t1skill3, p1.skill4=p1.skill4*t1.t1skill4, p1.skill5=p1.skill5*t1.t1skill5, p1.skill6=p1.skill6*t1.t1skill6 Allerdings hat das nach 5 Minuten gerademal 7.000 Datensätze durch, das ist viel zu langsam das muss doch schneller gehen :gruebel: |
Re: UPDATE Statement vereinfachen
Kennt MySQL überhaupt Foreign Keys? Mein phpMyAdmin zeigt mir keine an, sagt mir aber gleichzeitig dass er dieses Statement ausführen konnte:
SQL-Code:
ALTER TABLE player_contracts ADD CONSTRAINT fk_player_contract_player_t FOREIGN KEY ( player ) REFERENCES players( id )
|
Re: UPDATE Statement vereinfachen
Das kommt darauf an. Wenn es sich um MyISAM handelt, werden evtl. keine ForeignKeys unterstützt (zumindest war das früher mal so). Bei InnoDB sieht das anders aus. Um aber Dein Kernproblem besser zu verstehen, müsste man die DB-Struktur kennen. Mir kommt es jedenfalls komisch vor, dass Spaltenwerte mit Spaltenwerten aus anderen Tabellen multipliziert werden sollen.
|
Re: UPDATE Statement vereinfachen
Das iss schon richtig so mit dem Multiplizieren oder auch addieren(bin da noch am rumprobieren ;) )von Spaltenwerten.
Das ganze stellt ein Teamtraining dar bei dem sich die Werte der Spieler verändern. Multiplizieren ist da evtl tatsächlich nicht korrekt aber zumindest addieren wäre dann das richtige. Ich hab jetz manuell einen Index über die Spalten gemacht und jetzt geht es tatsächlich in 2 Sekunden glatt durch :D Ich hab den Tabellentyp auch mal in InnoDB geändert aber kann keinen Unterschied erkennen, ich sehe im phpMyAdmin nirgends auch nur einen Hinweis das es da Foreign Keys gibt. |
Re: UPDATE Statement vereinfachen
sorry, das ich was gesagt habe...
|
Re: UPDATE Statement vereinfachen
Hi,
@omata Was ja auch nichts anderes ist als eine "schöner" formatierte Variante des von Angel4585 formuliten Update... Der richtige Ansatz ist wohl tatsächlich, - neben einer passenden Abfrage - geeignete Indizes zu verwenden. :wink: |
Re: UPDATE Statement vereinfachen
jo scheinbar wurden die indizes beim anlegen nicht erstellt, hab sie manuell nachgetragen un jetz gehts problem los :thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz