2015-09-25 5 views
1

Я пытаюсь написать код вставки с условием - вставить, если не существует. Я пробовал в обоих направлениях, но у меня появилось сообщение об ошибке -sql - Вставить код с условием

У вас возникла ошибка в синтаксисе SQL; в руководстве, соответствует версии сервера MySQL для правильного синтаксиса, чтобы использовать вблизи «IF NOT EXISTS (SELECT * FROM предупреждений WHERE типа =„commentRepl“ в строке 1

что я делаю неправильно?

1:

mysql_query("INSERT INTO `alerts` (type, userID, fromID, refID, createDate) VALUES ('commentReply', ".$mainIndex['userID'].", ".$_SESSION['userDetails']['userID'].", ".$refID.", ".get_current_linuxTime().") 
     WHERE NOT EXISTS (SELECT * FROM alerts 
          WHERE type = 'commentReply' 
          AND userID = ".$mainIndex['userID']." 
          AND viewed = 0) 
    ");  

2:

mysql_query(" 
      IF NOT EXISTS (SELECT * 
          FROM alerts 
          WHERE type = 'commentReply' 
          AND userID = ".$mainIndex['userID']." 
          AND viewed = 0) 
        BEGIN 
         INSERT INTO `alerts` (type, userID, fromID, refID, createDate) VALUES ('commentReply', ".$mainIndex['userID'].", ".$_SESSION['userDetails']['userID'].", ".$refID.", ".get_current_linuxTime().") 
        END 
      ");  
+0

Избегайте использование _deprecated_ MySQL функции – user5173426

ответ

1

Вы не можете использовать, когда условие в операторе отбора, если оператор вставки не insert into select from

Необработанные заявление MySQL будет выглядеть

INSERT INTO `alerts` (type, userID, fromID, refID, createDate) 
select 'commentReply',1,1, 3, curdate() 
from alerts a1 
where not exists(
    select 1 from alerts a2 
    where a2.type = 'commentReply' 
    and a2.userID = 1 
    and a2.viewed = 0 
) 

И так как вы используете его на PHP, так что вы можете использовать некоторые как вы хотите что-то как

mysql_query(
"INSERT INTO `alerts` (type, userID, fromID, refID, createDate) 
select 'commentReply',".$mainIndex['userID'].",".$_SESSION['userDetails']['userID'].", ".$refID.", ".get_current_linuxTime()." 
from alerts a1 
where not exists(
    select 1 from alerts a2 
    where a2.type = 'commentReply' 
    and a2.userID = ".$mainIndex['userID']." 
    and a2.viewed = 0 
) 
"); 
+0

Я получил эту ошибку - # 1241 - Операнд должен содержать 1 столбец (ы) – user3642988

0

Используйте вот так. Я надеюсь, что это даст какие-либо идеи:

$exists = "SELECT email, password FROM agent_register WHERE email='$_POST[email]'"; 
     $exists_result = mysql_query($exists); 
     if (mysql_num_rows($exists_result) > 0) { 

      $danger_msg = "Error: This email already exists. Please try again."; 
     } else { 

      if (mysql_num_rows($exists_result) == 0) { 

       $sql = "INSERT INTO agent_register(name, company_name, vat_no, status) 
       VALUES('$name', '$company_name', '$vat_no', '0')"; 
       $result=mysql_query($sql); 
      } 
     } 
Смежные вопросы