Eviter les doublons à l'insertion [Résolu]

cs_spyro666 137 Messages postés lundi 10 janvier 2005Date d'inscription 28 août 2007 Dernière intervention - 5 sept. 2006 à 09:39 - Dernière réponse : cs_spyro666 137 Messages postés lundi 10 janvier 2005Date d'inscription 28 août 2007 Dernière intervention
- 5 sept. 2006 à 19:04
Bonjour tout le monde,

j'ai un petit problème avec MySQL... J'ai en effet une table que j'ai créé pour qu'il n'y ait pas deux fois la même valeur pour un enregistrement, seulement la manière dont je fais mes insertions  ne me permet pas de savoir si cette insertion existe ou non. Personnellement je pensais faire un petit test en MySQL directement mais ça n'a pas l'air de marcher. Voilà ce que j'essaie :

IF NOT EXISTS (SELECT * FROM `ma_table` WHERE `ma_colonne` = 'ma valeur')
BEGIN
INSERT INTO `ma_table` (`ma_colonne`) VALUES ('ma valeur');
END

Quelqu'un aurait une idée sachant que la machine sur laquelle je travaille ne supporte pas beaucoups de tests à la suite.

Merci d'avance.

Spyro666 contre le 555
Afficher la suite 

9 réponses

Répondre au sujet
Evangun 1982 Messages postés dimanche 20 février 2005Date d'inscription 24 septembre 2012 Dernière intervention - 5 sept. 2006 à 11:13
+3
Utile
Salut,
il suffit rajouter IGNORE après le INSERT et ça ignorera toutes les requêtes qui feraient des doublons par rapport une clé primaire ou unique. Reste à  créer une clé primaire ou unique sur les champs que tu veux.
à+

ps : http://dev.mysql.com/doc/refman/5.0/fr/insert.html
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Evangun
coockiesch 2268 Messages postés mercredi 27 novembre 2002Date d'inscription 13 septembre 2013 Dernière intervention - 5 sept. 2006 à 09:41
0
Utile
Salut!
Tu peux faire un DELETE et un INSERT juste après... Si l'enregistrement n'existe pas, le DELETE n'aura pas d'effet...

@++

R@f

Commenter la réponse de coockiesch
cs_spyro666 137 Messages postés lundi 10 janvier 2005Date d'inscription 28 août 2007 Dernière intervention - 5 sept. 2006 à 10:12
0
Utile
Bonne idée mais ça ne risque pas de ralentir passablement mon serveur?

Spyro666 contre le 555
Commenter la réponse de cs_spyro666
coockiesch 2268 Messages postés mercredi 27 novembre 2002Date d'inscription 13 septembre 2013 Dernière intervention - 5 sept. 2006 à 10:19
0
Utile
C'est sûr que c'est pas top, mais je sais pas si c forcément plus lent qu'un SELECT...

Commenter la réponse de coockiesch
cs_spyro666 137 Messages postés lundi 10 janvier 2005Date d'inscription 28 août 2007 Dernière intervention - 5 sept. 2006 à 10:21
0
Utile
Ok, je garde cette solution. Merci beaucoup!

Spyro666 contre le 555
Commenter la réponse de cs_spyro666
syndrael 2382 Messages postés lundi 4 février 2002Date d'inscription 29 décembre 2012 Dernière intervention - 5 sept. 2006 à 13:21
0
Utile
J'avais preske la réponse..

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

Ca te permet en plus de faire un update.. au cas ou.. c'est utile non ??

S.
Commenter la réponse de syndrael
cs_spyro666 137 Messages postés lundi 10 janvier 2005Date d'inscription 28 août 2007 Dernière intervention - 5 sept. 2006 à 14:54
0
Utile
Non puisque en fait ce que j'insère ce sont des mots pour un pendu en php et c'est le mot qui est unique du coup une mise à jour de la manière d'écrire le mot n'aurait aucun sens vu qu'elle est censée être tout le temps la même ;)

Spyro666 contre le 555
Commenter la réponse de cs_spyro666
syndrael 2382 Messages postés lundi 4 février 2002Date d'inscription 29 décembre 2012 Dernière intervention - 5 sept. 2006 à 15:32
0
Utile
Ben si on me dit tout en deux fois, c'est po étonnant ke je donne des mauvaises réponses !! LOL !!

En tout tu noteras la réactivité de toute la petite communauté ici..

Bonne journée.

S.
Commenter la réponse de syndrael
cs_spyro666 137 Messages postés lundi 10 janvier 2005Date d'inscription 28 août 2007 Dernière intervention - 5 sept. 2006 à 19:04
0
Utile
Bon je vais faire une petite notation générale.

Note générale pour la communauté :
Rapidité de réponse : 2 min : S
Pertinence des réponses : 90 % (toutes les soluces me permettaient de venir à bout de mon problème) : A
Temps jusqu'à la bonne réponse : 1h30 : S

Note générale : A+

Spyro666 contre le 555
Commenter la réponse de cs_spyro666

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.