web-dev-qa-db-fra.com

Insérer si PAS EXISTE ne fonctionne pas

J'essaie de copier des données d'une table vers une autre table mysql à partir de deux bases de données différentes
D'abord, j'obtiens toutes les données de la première table et les stocke dans la variable php
puis je boucle sur ce var pour insérer des données dans l'autre table
en utilisant cette requête

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')

mais ça ne marche pas

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 ' 

Quelle est la syntaxe correcte pour que cela fonctionne?

3
Ashraf Hefny

Vous ne pouvez pas utiliser la clause WHERE dans une instruction INSERT. Cependant, vous pouvez utiliser INSERT IGNORE si dans votre table de tarification, vous définissez nUserId ou vEmail comme clés uniques.

Plus d'informations sur la syntaxe INSERT: https://dev.mysql.com/doc/refman/5.6/en/insert.html

1
Jehad Keriaki

Je pense que le problème pourrait être des VALEURS et j'écrirais la déclaration comme suit:

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

vous pouvez essayer quelque chose comme

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

Pas besoin de les stocker en php.

Crée un tableau exactement comme celui spécifié, Remarque: copie uniquement les colonnes

CREATE TABLE tbl_name LIKE db_name.tbl_name;

Si vous souhaitez des noms de colonnes spécifiques:

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

Ensuite, si vous souhaitez copier toutes les données,

INSERT INTO tbl_name SELECT * FROM db_name.tbl_name;

Ou des données de colonne spécifiques ne

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

Si vous voulez des données spécifiques, ajoutez une clause 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);
}