2016-08-04 9 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') 

Этот запрос работает прямо на сервере sql. Но я получаю эту ошибку в mysql:if существует update else insert 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

Почему ?! Что это за альтернатива?

+0

да, есть альтернатива. не выполнять логику в слое базы данных – Andrew

+0

Очень сложно обновить sql-сервер, если он существует в mysql – middlestump

ответ

0

Вы можете использовать процедуры магазин, чтобы решить эту проблему, как ниже

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 ; 

и назвать его так:

call select_or_insert(); 
+0

Спасибо! этот запрос работает правильно, когда я запускаю его на вкладке sql phpMyAdmin. Но когда функция mysqli_query() в php-файле выполняет этот запрос, я получаю эту ошибку: У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса, используемого рядом с «DELIMITER $$ \ n ПРОЦЕДУРА ДРОБЛЕНИЯ, ЕСЛИ СУЩЕСТВУЕТ' select_or_insert' $$ \ n CREATE PROCED 'в строке 1 –

+0

Я не имею ни малейшего представления о PHP, Вы можете google как вызвать процедуру хранилища в php –

0

Используйте заменить вместо обновления или вставки: -

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

В этом случае вы должны иметь уникальный индекс.

Else в соответствии с вашим языком программирования, попробуйте следующее: -

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

Я получаю эту ошибку: # 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с 'if updates_rows == 0: INSERT INTO two_player (user1, score1, title) value' в строке 3 –

+0

Я предоставляю вам образец, а не quey –

+0

if updates_rows == 0: будет работать в программировании, что вы когда-либо используете. –