Hallo!
Hab da ein "kleines" Problem, bzw. eine Fragestellung, aber erst mal die Ausgangssituation:
Bei dem Ganzen handelt sich um ein Bundesliga-Tippspiel, und in 3 Tabellen speichere ich die Partien, Ergebnisse und abgegebene Tipps.
Die Tabellen sehen dabei (vereinfacht gesagt) wie folgt aus:
liga_spiele {
ID (Einmalige ID des Spiels)
HEIM (Heimmannschaft)
GAST (Gastmannschaft)
}
liga_ergebnisse {
SPIEL (ID des Spiels)
HEIMTORE (Tore der Heimmannschaft)
GASTTORE (Tore der Gastmannschaft)
}
liga_tipps {
SPIEL (ID des Spiels)
TIPPER (Tippername)
HEIMTORE (Tipp der Tor der Heimmannschaft)
GASTTORE (Tipp der Tor der Gastmannschaft)
}
Als Beispieldatensatz findet man z.B.:
liga_spiele ("12", "Schalke", "HSV)
liga_ergebnisse ("12", "2", "1")
liga_tipps ("12", "Testuser", "3", "0")
Also hat die Partie "Schalke - HSV" die ID 12, ist 2:1 ausgegangen und wurde vom Spieler Testuser mit 3:0 getippt.
Was ich nun eigentlich will: ich möchte in allen 3 Tabellen die ID von 12 auf 16 ändern, wenn möglich in einem Query.
Also hab ich folgendes ausprobiert (ich teste dabei mit dem MySQL Query Browser):
PHP-Code:
UPDATE liga_tipps AS y, liga_ergebnisse AS z, liga_spiele AS x
SET y.spiel = 16, z.spiel = 16, x.id = 16
WHERE y.spiel = x.id
AND z.spiel = x.id
AND x.id = 12
Funktioniert soweit auch bestens...
ABER: ich kenne die bisherige ID des Spiels bei dem UPDATE eigentlich noch nicht, sondern nur die Namen der beiden Teams.
Also hab ich folgendes probiert:
PHP-Code:
UPDATE liga_tipps AS y, liga_ergebnisse AS z, liga_spiele AS x
SET y.spiel = 16, z.spiel = 16, x.id = 16
WHERE y.spiel = x.id
AND z.spiel = x.id
AND x.id = (SELECT s.id FROM liga_spiele AS s WHERE s.heim = 'Schalke' AND s.gast = 'HSV')
Funktioniert aber leider nicht, da man bei einem UPDATE wohl kein SUBQUERY mit einer der zu aktualisierenden Tabellen machen darf.
Daher hab ich etwas geforscht und bin auf einen Workaround gestossen:
PHP-Code:
UPDATE liga_tipps AS y, liga_ergebnisse AS z, liga_spiele AS x
SET y.spiel = 16, z.spiel = 16, x.id = 16
WHERE y.spiel = x.id
AND z.spiel = x.id
AND x.id = (SELECT s.id FROM (SELECT * FROM liga_spiele) AS s WHERE s.heim = 'Schalke' AND s.gast = 'HSV')
Das komische daran in, das der SUBSELECT einzeln ausprobiert einwandfrei funktioniert und auch den Wert 12 zurückgibt. In Kombination mit dem UPDATE allerdings bekomme ich kein Ergebnis, das heißt, es wird in keiner Tabelle etwas geändert. Eine Fehlermeldung bekomme ich also auch nicht, also von der Syntax her sollte alles stimmen, der Query Browser zeigt mir lediglich "Abfrage erzeugte keine Ergebnismenge".
Doch woran liegt's? Was kann/muss ich ändern, oder ist das mit einem einzigen Query gar nicht möglich und ich muss erst das SELECT ausführen und danach erst das UPDATE?!?
Wie das ganze performance-technisch ausschaut ist mir in dem Falle total egal, da das ganze nur einmalig ausgeführt werden soll.
Ich hoffe, dass das irgendwo verständlich ist und bedanke mich schon mal in Vorfeld für jede Hilfe.
paulbrause