2015-03-25 2 views
0

То, что я хочу достичь, это, Если количество строк, возвращаемых запросом:MySQL случае выполнения запроса на основе результата, возвращаемых из запроса

SELECT count(*) FROM `games` WHERE cateID=2 AND active=1 

равно 0, я хочу запустить вставив запрос:

INSERT INTO games(cateID ,time,users,active) 
       VALUES ('2', '1', '0', '1') 

Я попытался использовать случай, как это:

SELECT CASE WHEN SELECT count(*) FROM `games` WHERE cateID=2 AND active=1)=0 
    THEN INSERT INTO games(cateID ,time,users,active) 
       VALUES ('2', '1', '0', '1') 
END 

Но он возвращает ошибку а, с:

#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 'SELECT count(*) FROM `games` WHERE cateID=2 AND active=1)=0 
    THEN INSERT INTO' at line 1 

Примечание: Оба запроса при выполнении отдельно выполняются без каких-либо ошибок. Как это достичь?

EDIT:

попытался Также это с IF,

SELECT if(count(*)==0,INSERT INTO games(cateID ,time,users,active) 
       VALUES ('2', '1', '0', '1')) FROM `games` WHERE cateID=2 AND active=1 

Тем не менее дает ту же ошибку. EDIT 2: По Предложенное комментарий,

INSERT INTO games(cateID ,time,users,active) 
select '2','2','0','1' 
where (SELECT count(*) FROM `games` WHERE cateID=2 AND active=1) <= 0 

Тем не менее дает ошибку.

+0

возможно дубликат [MySQL INSERT IF (обычаем, если заявления)] (http://stackoverflow.com/questions/6854996/mysql-insert-if-custom-if-statements) –

+0

сделал попробовать. Посмотрите на редактирование 2. – kritya

+0

http://stackoverflow.com/questions/18421905/mysql-insert-if-condition – d4Rk

ответ

0

Попробуйте

DECLARE 
    games_count INTEGER; 
BEGIN 
    SELECT count(*) FROM `games` WHERE cateID=2 AND active=1 ; 
    IF games_count = 0 THEN 
    INSERT INTO games(cateID ,time,users,active) VALUES ('2', '1', '0', '1'); 
    END IF; 
END; 
+1

Вам нужно выбрать INTO games_count SELECT count (*) FROM games WHERE cateID = 2 AND active = 1 INTO games_count ... PS Вы избили меня в течение нескольких секунд, я просто готовлю нажать «Опубликовать свой ответ»: D –

+0

Дает ошибку: # 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего MySQL-сервера, для правильного синтаксиса для использования рядом с 'DECLARE games_count INTEGER' в строке 1 – kritya

0

перед тем, чтобы сделать вставку, проверьте запрос на выборку. если запрос запроса select 0 не записывает ничего, это вставка с запросом на вставку.

select cateID,'2' as time,'0' as users,active 
FROM 
    (select count(*) as countRecord,cateID,active 
    from games 
    where CATEID=2 and active=1 group by cateID,active) G 
where countRecord <= 0 
group by cateID, active,time,users 
+0

По-прежнему ошибка # 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего MySQL-сервера, для правильного синтаксиса для использования рядом с активным = 1 группой по cateID, активным) где countRecord <= 0 group by cateID, activ 'в строке 5 – kritya

+0

@kritya Oups извините, я просто забудьте 'and' в where where' CATEID = 2 active = 1' i 'Я исправил это –

Смежные вопросы