2016-08-04 23 views
0
IF EXISTS (SELECT * FROM two_player WHERE title='math' and user2 is null) 
UPDATE two_player SET score2='50' , user2='zahra' WHERE title='math' and user2 is null 
ELSE 
INSERT INTO two_player (user1,score1,title) values ('zahra', '50', 'math') 

Diese Abfrage funktioniert direkt in SQL Server. Aber ich bekomme diesen Fehler in der Mysql:Wenn vorhanden Update sonst einfügen mysql

*#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF EXISTS (SELECT * FROM two_player WHERE title='math' and user2 is null) ' at line 1

warum ?! Was ist die Alternative dafür?

+0

Ja, es gibt eine Alternative. mach keine Logik in der Datenbankschicht – Andrew

+0

Sehr schwierig, sql Server zu aktualisieren, wenn in mysql – middlestump

Antwort

0

Sie Stored Procedures verwenden können, um dieses Problem wie unten

DELIMITER $$ 
    DROP PROCEDURE IF EXISTS `select_or_insert`$$ 
    CREATE PROCEDURE select_or_insert() 
    begin 

    IF EXISTS (SELECT * FROM test WHERE id="id") THEN 
     SELECT * FROM test WHERE id="id"; 
    ELSE 
     INSERT INTO test (id,name) VALUES ("id",'name'); 
    END if; 

    END$$ 

    DELIMITER ; 

zu lösen und es so nennen:

call select_or_insert(); 
+0

Danke! Diese Abfrage funktioniert richtig, wenn ich es in der SQL-Registerkarte von phpMyAdmin ausführen. Aber wenn die Funktion mysqli_query() in einer PHP-Datei diese Abfrage durchführt, erhalte ich folgende Fehlermeldung: Sie haben einen Fehler in Ihrer SQL-Syntax. Überprüfen Sie das Handbuch, das Ihrer MySQL-Server-Version entspricht, für die richtige Syntax in der Nähe von 'DELIMITER $$ \ n DROP PROCEDURE WENN EXISTS 'select_or_insert' $$ \ n CREATE PROCED' in Zeile 1 –

+0

Ich habe keine Ahnung von PHP, Sie können google, wie man Speicherprozedur in php aufruft –

0

Verwenden ersetzen stattdessen aktualisieren oder einfügen: -

REPLACE INTO two_player (user1,user2,score1,score2,title) values ('zahra', 'zahra','50','50', 'math') 

In diesem Fall müssen Sie einen eindeutigen Index haben.

Else nach Programmiersprache versuchen Sie dies: -

UPDATE two_player SET score2='50' , user2='zahra' WHERE title='math' and user2 is null 

if updates_rows == 0: 
     INSERT INTO two_player (user1,score1,title) values ('zahra', '50', 'math') 
+0

ich bekomme diesen Fehler: # 1064 - 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 'if updates_rows == 0 entspricht: INSERT INTO two_player (user1, score1, title) Wert' in Zeile 3 –

+0

Ich biete Probe, nicht quie –

+0

if updates_rows == 0: funktioniert in der Programmierung, was auch immer Sie verwenden. –

Verwandte Themen