web-dev-qa-db-ja.com

NOT EXISTSが機能しない場合に挿入します

テーブルから2つの異なるデータベースの別のmysqlテーブルにデータをコピーしようとしています
最初にすべてのデータを最初のテーブルから取得し、それらをphp変数に格納します
次に、その変数をループして、他のテーブルにデータを挿入します
このクエリを使用

INSERT INTO `users` (`nUserId`, `vLoginName`, `vFirstName`, `vLastName`, `vEmail`)
    VALUES ('$entity_id','$name','$firstname','$lastname','$email') 
    WHERE NOT EXISTS (SELECT `nUserId`,`vEmail`
                      FROM `users`
                      WHERE `nUserId`='$entity_id' 
                      AND   `vEmail` = '$email')

しかし、それは機能していません

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 'WHERE NOT EXISTS (SELECT `nUserId`,`vEmail` FROM users ' 

これを機能させるための正しい構文は何ですか?

3
Ashraf Hefny

WHEREステートメントではINSERT句を使用できません。ただし、INSERT IGNORE targerテーブルでnUserIdまたはvEmailを一意のキーとして定義する場合。

INSERT構文の詳細: https://dev.mysql.com/doc/refman/5.6/en/insert.html

1
Jehad Keriaki

問題はVALUESかもしれないと思うので、ステートメントを次のように書きます。

INSERT INTO `users` 
    (`nUserId`, `vLoginName`, `vFirstName`, `vLastName`, `vEmail`)
SELECT 
    '$entity_id', '$name', '$firstname', '$lastname', '$email' 
FROM dual
WHERE NOT EXISTS (SELECT *
                    FROM `users`
                    WHERE `nUserId`='$entity_id' 
                    AND   `vEmail` = '$email')
2
SQLHound

あなたは何かを試すことができます

delimiter $$
create procedure select_or_insert()
begin
  IF EXISTS (select * from users where username = 'something') THEN
    update users set id= 'some' where username = 'something';
 ELSE 
insert into users (username) values ('something');
  END IF;
end $$
delimiter ;
2
Bill N. Varelli

それらをphpに保存する必要はありません。

指定したテーブルとまったく同じようにテーブルを作成します。注:列のみをコピーします

CREATE TABLE tbl_name LIKE db_name.tbl_name;

特定の列名が必要な場合:

CREATE TABLE tbl_name SELECT column_name, column_name FROM db_name.tbl_name;

次に、すべてのデータをコピーする場合は、

INSERT INTO tbl_name SELECT * FROM db_name.tbl_name;

または特定の列データは

INSERT INTO tbl_name SELECT column_name, column_name FROM db_name.tbl_name;

特定のデータが必要な場合は、WHERE句を追加します。

1
Martin Czech
$existeEmail=$mysqli->query("SELECT * FROM tb_users WHERE email = '$email'");
 if(!$existeEmail=mysqli_fetch_array($existeEmail))/*si existe en la tabla tblreseteopass*/
{



}else{
    $email = $existeEmail['email'];
      // Direccionado hacia el registro con la Alerta 001
            // ya existe una cuenta asociada a este email, si no recuerda la contraseña, solicite una nueva
            header("Location: https://www.yourpage.com/b/?m=f_lg);
}