web-dev-qa-db-fra.com

mysql: insert record sinon, sinon retourne l'id de l'enregistrement

j'ai besoin d'insérer des valeurs uniques dans une table, et besoin des identifiants d'enregistrements, besoin d'insérer ces identifiants dans la table de relations, enregistrer la clé primaire (id). 

et je veux le faire pour plusieurs valeurs, comme orange, mangue, banane, comme insertion par lot.

schéma:

------------
id | tag   |
------------
1  | orange|
------------

j'ai trid ce pour un seul enregistrement

INSERT INTO `tags` (`tag`) 
SELECT 'myvalue1' 
FROM tags
WHERE NOT EXISTS (SELECT 1 FROM `tags` WHERE `tag`='myvalue1') 
LIMIT 1

posté la question pour comprendre une solution optimisée, je ne veux pas utiliser des boucles supplémentaires dans le code pour faire correspondre les valeurs de db.

20
Abuzer Firdousi

Il y a un exemple sur la page de documentation pour INSERT ... ON DUPLICATE KEY UPDATE :

Votre requête ressemblerait à ceci:

INSERT INTO `tags` (`tag`) VALUES ('myvalue1')
  ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), `tag`='myvalue1';
SELECT LAST_INSERT_ID();
14
Marcus Adams

Il y a 4 méthodes énumérées dans le lien ci-dessous, jetez un coup d'œil et utilisez celle qui vous convient le mieux.

Méthode 1: SELECT, puis INSERT Méthode 2: essayez {INSERT} catch {SELECT} Méthode 3: INSERT IGNORE puis SELECT Méthode 4: INSERT INTO ... ON DUPLICATE KEY UPDATE.

http://mikefenwick.com/blog/insert-into-database-or-return-id-of-duplicate-row-in-mysql/

2
foxybagga

Insérer dans une table MySQL ou mettre à jour s'il existe

cela résoudrait votre problème? Je pense que cela résoudrait la plupart de vos problèmes si vous traduisiez sa réponse dans un format qui vous convient.

0
Fallenreaper

Voici l’état mysql à insérer s’il n’existe pas et à renvoyer l’id soit il nouvelle insertion ou ancien 

    INSERT INTO `tags` (`tag`) 
SELECT 'myvalue1' 
FROM tags
WHERE NOT EXISTS (SELECT id FROM `tags` WHERE `tag`='myvalue1') 
LIMIT 1;
select * from brand where `tag`='myvalue1'
0
Yosra Nagati