Bedingtes INSERT mit Rückgabe

Kekse

Benutzer
Beiträge
6
Hallo,
ich bin seit einer Weile mit mysql am Arbeiten, allerdings beschränkt sich mein Wissen auf das Grundlegende.
Ich habe eine Datenbank für ein Rundenbasiertes Spiel. Eine Runde dauert 15 Spiele (wobei das allgemein variabel ist). Wenn eine Runde begonnen wird, wird überprüft, ob noch ein Spiel des Spielers für diese Runde offen ist und falls ja dessen ID zurückgegeben:
Code:
SELECT game_id
FROM game
WHERE round_id = @round_id AND player_id = @player_id
AND [längerer Code, der per Subquery IN anderen Tabellen überprüft, ob das Spiel noch läuft]
Jetzt mein problem: Falls diese ID nicht gefunden wurde, soll ein neues Spiel eingefügt werden (einfaches Insert, kein Problem an sich) und die neue game_id (ist ein AUTO_INCREMENT Feld) zurückgegeben werden.
Ich weiß, dass ich INSERT ... SELECT benutzen kann, und dass INSERT nur ausgeführt wird, falls SELECT etwas zurückliefert, aber ich bin mir nicht sicher, wie ich das ganze umsetzen kann, dass ich immer die korrekte ID bekomme - unabhängig, ob alt oder gerade neu eigefügt. Geht das überhaupt in einem Query oder muss ich das unterteilen und die Datenbank zwischendurch locken? Wie würde das dann aussehen?

Ich hoffe ihr versteht mein Problem und könnt mir helfen :)

Liebe Grüße
 
Werbung:
Du müsstest eigentlich nur deinen jetzigen Select negieren um alle IDs zu bekommen die neu eingetragen werden sollen. Wenn ich das richtig verstehe...
Code:
INSERT INTO tabelle
SELECT game_id
FROM game
WHERE ( round_id != @round_id OR player_id != @player_id ) AND ...
 
MySql unterstützt leider kein WHERE in INSERT
Vielleicht kann ich es noch mal sinnvoller formulieren:
- Ich möchte ein INSERT falls 1. der Key noch nicht existiert (das wäre kein Problem, ON DUPLICATE und so...) und 2. unter einer weiteren Bedingung (Tabelle wird gejoit, darin steht's)
- Ich möchte den gefundenen Key, falls er schon existiert hat, bzw. den AUTO_INCREMENT, falls es hinzugefügt wurde.
Ich denke mal, das größte Problem ist die zusätzliche Bedingung.

Viele Grüße
 
Klingt nach einer Stored Proc, was Du suchst. Die technischen Möglichkeiten von MySQL sind hier zwar beschränkt, aber das könnte vielleicht sogar damit machbar sein.
 
Werbung:
Zurück
Oben