Les Allergies
Alimentaires
Posez votre question Signaler

Mysql: INSERT IF NOT EXISTS [Résolu]

developper55 120Messages postés 28 décembre 2007Date d'inscription 30 mai 2012Dernière intervention - Dernière réponse le 23 août 2008 à 12:36
Bonjour,
J'ai mysql version 2.9.1.1, phpmyadmin, php5
et j'ai besoin d'insérer une lignes de deux valeurs dans une table sachant que ces deux valeurs n'existent pas dans la même ligne,
INSERT INTO `listedemachoix` ( `index_listechoix` , `index_gens` , `index_formule`) VALUES ( NULL ,'17', '19') WHERE NOT EXISTS ( SELECT * FROM listedemachoix WHERE index_gens='17' AND index_formule='19')
ça donne d'erreur au niveau "WHERE NOT EXISTS ",
mais j'ai essayé avec count(*)
tous les idées sont les biens venues
Merci
Lire la suite 

Mysql: INSERT IF NOT EXISTS »

10 réponses
Réponse
+6
moins plus
est la solution ?
je lance deux requêtes, une pour tester , une pour injecter
Azraelinou - 30 juin 2008 à 21:51
DECLARE @ID INT, @Name VARCHAR(255)

INSERT INTO Table
SELECT I.ID, I.Name
FROM
(
SELECT @ID, @Name
) I
LEFT OUTER JOIN
Table T
ON I.ID = T.ID
WHERE T.ID IS NULL

Cela n'insère que ce qui n'est pas présent dans la Table ciblée, bien entendu on parle là de tables normalisées, avec une PK.
Si tu devais checker d'autres valeurs, il suffirait de les ajouter à la clause ON qui ferait alors tout le boulot pour faire une extraction d'ensembles.
Tu checkes ROW_COUNT() à la sortie, et t'es au top pour savoir si tu dois faire un UPDATE à la place si ROW_COUNT() = 0.

Hope it helps
Ajouter un commentaire
Réponse
-1
moins plus
Salut,

Mysql ne supporte les requêtes imbriquées qu'à partir de la version 4.1.
Quant au NOT EXISTS je ne sais pas depuis quand il est supporté.
Ajouter un commentaire
Réponse
-1
moins plus
JE VEUX tester si les deux valeurs que je dois insérer, n'existe pas dèja dans la table
Ajouter un commentaire
Réponse
-1
moins plus
Oui alors fait d'abord un select pour vérifier ça.
Ajouter un commentaire
Réponse
-1
moins plus
ok merci,
jé terminé par plusieurs étapes
Merci
Ajouter un commentaire
Réponse
-1
moins plus
Tu met un index sur les deux colonnes qui doivent être unique et donc cela donnera une insertion possible uniquement si les champs n'ont pas déjà ces valeurs ensemble.

De plus, NOT EXISTS, moi je connais pas, mais NOT IN oui par contre
Azraelinou - 30 juin 2008 à 22:56
NOT IN est juste plus gourmand en resources.

Mais consomme moins de place en code donc plus lisible.
Ajouter un commentaire
Réponse
-1
moins plus
merci
Ajouter un commentaire
Réponse
-2
moins plus
Ben je comprends pas ce que tu veux faire avec WHERE NOT EXISTS
Ajouter un commentaire
Ce document intitulé « mysql: INSERT IF NOT EXISTS » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?