2009-08-20 7 views
3

Ich bin beschäftigt eine UPDATE/INSERT Anfrage zu tun, aber hier ist der Knackpunkt:MySQL - Verschiedene UPDATE sonst INSERT-Anweisung

table PLAYERS { 
    player_id 
    game_id 
    team_id 
    position 
    number 
} 

Was folgendes geschehen soll, ist:

ich testen, ob es ist ein Eintrag, wo player_id = '$player_id' AND game_id = '$game_id' AND team_id = '$team_id'.

Wenn ja, dann passiert folgendes:

position = '$position' AND number = '$number'

Gibt es eine Möglichkeit, dies nur MySQL-Abfrage-Sprache tun können, ohne die Notwendigkeit für PHP Validierung zwischen Abfragen?

+0

ich nicht einen Primärschlüssel für diese Tabelle hat ausgeführt werden, sondern haben INDIZES auf game_id, player_id , und team_id, wenn das hilft ... –

+0

Sie können einen zusammengesetzten Primärschlüssel für die Felder Spiel, Spieler und Team erstellen. –

Antwort

0

Nun, ich habe dies mit mehreren IF-Anweisungen behoben, um zu bestimmen, ob es eingefügt oder aktualisiert werden soll.

6
INSERT INTO TABLE (COLUMNS) VALUES(FIELDS) UPDATE ON DUPLICATE KEY position = somevalue, number=number 

1) Tries
2) einfügen, wenn es ein Datensatz mit einem eindeutigen Feld (Primärschlüssel, eindeutiger Index, etc.) statt das Feld aktualisieren.

+0

Dies ist meine Abfrage: 'INSERT INTO Spieler (Spiel_ID, Spieler_ID, Position, Nummer) WERTE ('$ game_id', '$ Spieler [$ i]', '$ Position [$ i]', '$ Nummer') UPDATE ON DUPLICATE TASTE position = '$ position [$ i]', number = '$ number'' Aber ich bekomme folgenden Fehler: 'Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Server-Version für die richtige Syntax in der Nähe von 'UPDATE ON DUPLICATE KEY entspricht Position =' LH Prop ', number =' 1 '' in Zeile 1 ' Irgendwelche Ideen? –

+1

Ja, Sie haben Fehler. Sie geben Zahlen als Zeichenfolgen ein. – Havenard

+0

Ich habe die ganze Zeit so eingefügt, und es hat funktioniert. –

0

, es sei denn es ist nicht in einer Transaktion arbeiten, oder Sie können, dass die gleichzeitigen Anfragen an der DB garantieren nicht