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.
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();
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/
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.
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'