Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1496 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] Eviter les doublons dans une table ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MySQL] Eviter les doublons dans une table ?

n°595233
bab
Posté le 21-12-2003 à 18:47:43  profilanswer
 

est-ce qu'il est possible quand on insert des données dans une table d'éviter les doublons ?
 
exemple avec une table "truc" ayant un champ NOM et un champ PRENOM
 
on insert :
INSERT INTO truc (NOM,PRENOM) values("toto", "the" )
 
et je voudrais ke si je repète l'insertion, il ne se passe rien car les valeurs existent déjà
 
possible simplement ?

mood
Publicité
Posté le 21-12-2003 à 18:47:43  profilanswer
 

n°595234
HappyHarry
Posté le 21-12-2003 à 18:49:08  profilanswer
 

tu mets un index unique sur le couple (nom,prenom) et tu trappes la  violation de contrainte dans ton code

n°595237
bab
Posté le 21-12-2003 à 18:57:30  profilanswer
 

je vois pas comment faire un index unique sur ce couple

n°595239
bab
Posté le 21-12-2003 à 19:00:43  profilanswer
 

j'arrive a faire une clé unique pour ce couple mais que mettre dans la taille des champs ?? (car c'est du texte et ça peut prendre bcq)

n°595242
bab
Posté le 21-12-2003 à 19:06:50  profilanswer
 

oki merci bien
je comprends mieux l'histoire de la taille.
 
pour ce qui est de fouiner sur le net pour trouver la réponse, on s'y perd très vite pour trouver ce genre de réponse :(
 
alors qu'ici y'a tout plein de gens qui connaissent tout et qui répondent super rapidement  :love:

n°595285
Fabien
Vive la super 5 !
Posté le 21-12-2003 à 20:06:05  profilanswer
 

sinon tu peux faire cette verification en faisait 1 select et si mysql_num_rows(tarequete) retourne 0 tu peux inserer, sinon tu affiche "deja existant"
 
voila


Message édité par Fabien le 21-12-2003 à 20:06:11
n°595292
HappyHarry
Posté le 21-12-2003 à 20:23:56  profilanswer
 

c un peu con de le faire toi meme quand le sgbd le fait pour toi :o

n°595293
HappyHarry
Posté le 21-12-2003 à 20:24:28  profilanswer
 

Bab a écrit :

oki merci bien
je comprends mieux l'histoire de la taille.
 
pour ce qui est de fouiner sur le net pour trouver la réponse, on s'y perd très vite pour trouver ce genre de réponse :(
 
alors qu'ici y'a tout plein de gens qui connaissent tout et qui répondent super rapidement  :love:  


 
et si tout le monde faisait pareil ? :sarcastic:

n°595294
Fabien
Vive la super 5 !
Posté le 21-12-2003 à 20:28:05  profilanswer
 

HappyHarry a écrit :

c un peu con de le faire toi meme quand le sgbd le fait pour toi :o

oué mais dans le cas du sgbd, il ne te retourne pas le message "deja inséré" :o

n°595297
bab
Posté le 21-12-2003 à 20:30:38  profilanswer
 

vu le nombre de posts par jour, bcq font pareils ;)
tu trouve pas que c'est pour ça ce forum ???

mood
Publicité
Posté le 21-12-2003 à 20:30:38  profilanswer
 

n°595298
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 21-12-2003 à 20:30:38  profilanswer
 

y'a qu'a faire un trigger sur l'insert ou l'update qui détectera et traitera le doublon
 
ah non, mince c'est mysql
[:neowen]


---------------
J'ai un string dans l'array (Paris Hilton)
n°595300
HappyHarry
Posté le 21-12-2003 à 20:32:28  profilanswer
 

Fabien a écrit :

oué mais dans le cas du sgbd, il ne te retourne pas le message "deja inséré" :o
 


 
ahem ... qu'est ce qui t'empeche de trapper l'erreur et d'afficher le message de ton choix ? :sarcastic:

n°595301
HappyHarry
Posté le 21-12-2003 à 20:32:53  profilanswer
 

Harkonnen a écrit :

y'a qu'a faire un trigger sur l'insert ou l'update qui détectera et traitera le doublon
 
ah non, mince c'est mysql
[:neowen]


 
c ptet un poil bourrin comme solution, non ?

n°595314
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 21-12-2003 à 20:40:12  profilanswer
 

HappyHarry a écrit :


 
c ptet un poil bourrin comme solution, non ?  


un peu mais bon, au moins c'est efficace [:ddr555]


---------------
J'ai un string dans l'array (Paris Hilton)
n°595316
HappyHarry
Posté le 21-12-2003 à 20:41:06  profilanswer
 

Harkonnen a écrit :


un peu mais bon, au moins c'est efficace [:ddr555]


 
nan, meme pas ... c ca le pire [:ddr555]

n°595319
Fabien
Vive la super 5 !
Posté le 21-12-2003 à 20:44:16  profilanswer
 

HappyHarry a écrit :


 
ahem ... qu'est ce qui t'empeche de trapper l'erreur et d'afficher le message de ton choix ? :sarcastic:

ben je sais pas faire.
t'as un exemple ?
 
tu veux dire un truc du genre or die("message" ) ?

n°595320
HappyHarry
Posté le 21-12-2003 à 20:47:42  profilanswer
 

chais pas j'connais pas php [:spamafote]
 
apres avoir jeté un coup d'oeil dans la doc, ca quitte le script ca non ?
 
mon idée, et ca se fait tres bien dans d'autres languages, c d'intercepter l'erreur sans quitter, et afficher proprement un message d'erreur dans une zone de son choix

n°595322
Fabien
Vive la super 5 !
Posté le 21-12-2003 à 20:54:08  profilanswer
 

HappyHarry a écrit :

chais pas j'connais pas php [:spamafote]
 
apres avoir jeté un coup d'oeil dans la doc, ca quitte le script ca non ?
 
mon idée, et ca se fait tres bien dans d'autres languages, c d'intercepter l'erreur sans quitter, et afficher proprement un message d'erreur dans une zone de son choix
 

oué mais comment tu fait pour identifier l'erreur? ca peut etre un probleme dans la requete, comme un probleme de doublon, et tu veux faire comment pour differencier ?

n°595324
HappyHarry
Posté le 21-12-2003 à 20:56:49  profilanswer
 

y a un numero d'erreur en general qui est retourné, apres y a plus qu'a mater la doc du sgbd
 
edit : en php, a priori mysql_errno (et mysql_error pour avoir le texte associé)


Message édité par HappyHarry le 21-12-2003 à 20:59:43
n°595329
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 21-12-2003 à 21:02:50  profilanswer
 

Fabien a écrit :

ben je sais pas faire.
t'as un exemple ?
 
tu veux dire un truc du genre or die("message" ) ?


non
ce qu'il veut dire, c'est que tu dois trapper le code d'erreur, et afficher un message en conséquence
 
un exemple en VB .NET et Access (moi non plus je connais pas PHP) :

Code :
  1. Try
  2.    While Reader.Read
  3.       req = "DELETE * FROM Table Where Champ = xxx"
  4.       comm.CommandText = req
  5.       comm.ExecuteNonQuery()
  6.    End While
  7. Catch Ex as OleDb.OleDbException
  8.    MessageBox.Show(Ex.Errors(0).Message)
  9. End Try


Bien sur, tu peux adapter le message en fonction du code d'erreur retourné par Ex.Errors(0). Dans mon cas, j'affiche juste le message d'erreur retourné par Access


---------------
J'ai un string dans l'array (Paris Hilton)
n°595344
Fabien
Vive la super 5 !
Posté le 21-12-2003 à 21:55:27  profilanswer
 

Harkonnen a écrit :


non
ce qu'il veut dire, c'est que tu dois trapper le code d'erreur, et afficher un message en conséquence
 
un exemple en VB .NET et Access (moi non plus je connais pas PHP) :

Code :
  1. Try
  2.    While Reader.Read
  3.       req = "DELETE * FROM Table Where Champ = xxx"
  4.       comm.CommandText = req
  5.       comm.ExecuteNonQuery()
  6.    End While
  7. Catch Ex as OleDb.OleDbException
  8.    MessageBox.Show(Ex.Errors(0).Message)
  9. End Try


Bien sur, tu peux adapter le message en fonction du code d'erreur retourné par Ex.Errors(0). Dans mon cas, j'affiche juste le message d'erreur retourné par Access

ha oué, mais ca c'est crade et pas trés "user friendly".
t'image si je mettait "mysql error table doesn't exist" a la place de "cette catégorie n'existe pas".

n°595347
*syl*
--> []
Posté le 21-12-2003 à 22:07:59  profilanswer
 

Fabien > Tu dis n'importe quoi, Harko a pourtant bien expliqué..

n°595351
Fabien
Vive la super 5 !
Posté le 21-12-2003 à 22:19:06  profilanswer
 

*Syl* a écrit :

Fabien > Tu dis n'importe quoi, Harko a pourtant bien expliqué..

bon ben je verais la doc mysql sur les erreurs pour voir, parce que l'exemple que m'as donné harko n'est pas en php/mysql donc ca m'aide pas trop si je veux faire comme cela.

n°595416
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 22-12-2003 à 10:07:02  profilanswer
 

Fabien a écrit :

bon ben je verais la doc mysql sur les erreurs pour voir, parce que l'exemple que m'as donné harko n'est pas en php/mysql donc ca m'aide pas trop si je veux faire comme cela.
 


y'a pas de gestion des exceptions en PHP, mais tu peux utiliser la fonction mysql_errno() pour afficher un message en fonction du code d'erreur.
 
liste des codes d'erreur (pas très explicite) :
http://www.mysql.com/doc/en/Error-returns.html
 
ou sinon tu peux aller récupérer directement les #define des différents codes d'erreur dans le source de mysql, tu as le code d'erreur, le #define correspondant, et le message associé

n°595574
Mara's dad
Yes I can !
Posté le 22-12-2003 à 14:43:34  profilanswer
 

Pour un insert, laisser le SGBD vérifier les contraintes c'est bien, sauf pour des inserts multiples, comme pour des deletes multiples.
 
Exemple :
- L'appli : Tiens voilà une liste. Coches les cases devant les items à supprimer.
- L'utilisateur : J'ai coché 3 items : Machin, Truc et Bidule.
- L'appli. Ok, t'est bien certain de vouloir supprimer Machin, Truc et Bidule ?
- L'utilisateur : Oui !
- L'appli : Ha merde, impossible de supprimer Truc, il est utilisé par autre chose ! Heu, en revanche Machin et Bidule ont bien été supprimés ;-)
- L'utilisateur : Merde putain c'est quoi cette appli. Elle aurait pas pu me le dire avant. Si Truc n'était pas supprimable, j'aurai pas non plus supprimé Machin ! Merde de Merde, va falloir que je recrée Machin !
 
Je préfère une appli qui ne propose à la sélection que ce qui est réellement supprimable.
Bien sûr les choses peuvent avoir changées entre l'affichage de la liste et la validation de l'utilisateur.
Penser aussi à ne rien faire si tous les enregs demandé ne sont pas supprimables (transaction ou lock).
Dans ce cas, il faut re-demander confirmation à l'utilisateur puisque sa demande ne peut pas être honorée complètement.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL] Eviter les doublons dans une table ?

 

Sujets relatifs
UPDATE en MySQLTable et form, comment faire un form par ligne ?
quel fonction PHP pour voir s'il existe une base MySql sur mon serveurEquivalent de cellspacing pour une table en CSS ?
MySQL a répondu:You have an error in your SQL syntax near 'Serveur locExiste-t-il une liste de tout les codes erreurs générés par MySQL?
flash MX , PHP et mysql?[MySQL] - Requete SQL sur 3 tables + 2 count... ca foire a moitier
TABLE 100%, alternative ?CSV et MySQL ...
Plus de sujets relatifs à : [MySQL] Eviter les doublons dans une table ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR