logo

NPDS : Gestion de contenu et de communauté


Content & Community Management System (CCMS) robuste, sécurisé, complet, performant, parlant vraiment français, libre (Open-Source) et gratuit.
18 visiteur(s) et 0 membre(s) en ligne.
Activité du Site

Pages vues depuis 25/05/2001 : 109 398 723

  • Nb. de membres 8 696
  • Nb. d'articles 1 695
  • Nb. de forums 26
  • Nb. de sujets 8
  • Nb. de critiques 92

Top 10  Statistiques

Index du forum »»  Le coin des codeurs »» Mysql : insérer un élément si il n'existe pas

Mysql : insérer un élément si il n'existe pas#9089

5Contributeur(s)
simonkarasnipeTribal-Dolphincapcavernehexagone
3 Modérateur(s)
developpeurjpbJireck
simonkara simonkaraicon_post
Bonjour,

kelkun connaîtrait une requete mysql qui insère un élément si il n'existe pas déjà dans la base ???

Merciiiiiiiii



Simonkara
snipe snipeicon_post
tu fait une requette avant qui verifie son existance, et si le nombre de ligne retourné est egale a 0 allors tu insert :)
simonkara simonkaraicon_post
Mais en fait, il me faudrait ca uniquement avec du Mysql pas du PHP....


En fait c'est pour mettre à jour ma base de donnée... seulement... j'ai beau mettre le champs en mode UNIQUE .... si j'essais d'ajouter à la base un élément qui existe déjà, je programme arrête l'insertion ... enfin c ce qui se passe sous console admin ...


quelqu'un a une solution ???
Tribal-Dolphin Tribal-Dolphinicon_post
ben c du mysql ça !!
tu te connecte à ton serveur mysql(terminal) et tu fait tes requêtes.
capcaverne capcaverneicon_post
euh ...
normalement dans une table MySQL, tu as 1 (au pire 2 ) champs uniques (ce sont la/les clé(s)).
De 2 chose l'une :
- soit tu veux mettre à jour un element déjà existant : UPDATE
- soit tu veux ajouter un nouvel enregistrement (INSERT INTO) et quoiqu'il advienne i lfaut impérativement que les champs UNIQUE le soient !

Il y a une autre solution : te ne met pas de champs en UNIQUE et tu ajoute un champs à ta table (per exemple CLE) que tu définit en PRIMARY KEY UNIQUE AUTOINCREMENT .

Exemple : 1 table 3 champs : CLE,ID,NOM (CLE = PRIMARY KEY, UNIQUE, AUTOINCREMENT)
et quand tu fait ton insert tu laisse le 1er champs vide comme suit:
INSERT INTO ma_table (CLE,ID,NOM) VALUES ('',mon_id,mon_nom);
si je me souviens bien ca doit pouvoir marcher
simonkara simonkaraicon_post
alors je m'explique d'avantage lol

j'ai une base de donnée. Avec des éléments déjà présents.... Je vais avoir une liste d'éléments à y insérer. Mais il se peut que les éléments soient déjà présents... Donc je ne dois surtout pas les rajouter si ils sont déjà dans ma base...

J'ai déjà un champs Id en mode auto incrément dans ma base. Maintenant, j'ai un champs Nom pour désigner l'élément. Ce nom ne dois pas pouvoir Réapparraître.

Ce que je fais, c'est que je vais déclancher un programme en C pour traiter des fichiers, et ensuite, je construit un fichier ".sql" que je chargerais dans ma base ensuite.

Donc, c'est une commande Mysql que j'ai essais de construire...

Pour l'instant le mode UNIQUE ca marche pas trop ... Si j'essais d'insérer un élément déjà existant dans la base, Mysql ce fout bien que ma requête soit fini ou pas... Il stop tout dès qu'il a trouvé une similarité entre ce que je veux insérer et ce qui existe... Mais moi ca me plairait bien de pouvoir insérer quand même les autres éléments inexistants dans la base....

Voilà, j'espère que c'est un peu plus clair,

Merci pour vos réponses
simonkara simonkaraicon_post
ah heu .... Tribal Dolphin, ta solution m'intéresse mais vois-tu visiblement je sais pas faire ce genre de chose en Mysql ... sinon j'aurais pas cru que tu parlais d'une solution php ... lool

Tu peux me donner un exemple de requête Mysql de ta solution ??


Merciiiiii :=!

:-D
Simonkara
Tribal-Dolphin Tribal-Dolphinicon_post
Pour les commandes mysql, vas sur www.nexen.net (en français) ou www.mysql.com (en anglais) pour toutes les infos.

Les commande c du genre :
mysql -u root password
mysql> select * from user
etc etc ........

Pour ton soucis, met un Index UNIQUE sur le nom des rubriques, y'as pas de raisons que ça marche pas.
capcaverne capcaverneicon_post
euh...
SQL n'est pas un langage conditionnel à ma connaissance (un peu vieille il est vrai) donc ca veux dire que tu ne peux pas faire en SQL pur des truc du genre :
si (l'enregistrement existe) alors je ne fait rien (ou UPDATE)
sinon j'insère.
Le langaege SQL a pour seul but de rentrer des données dans une base ou d'interroger cette base mais pas de faire des traitements conditionnels. Ces traitement doivent êtres fait avec un autre langage (PHP,C, COBOL ou autre) qui lui ,va se charger de toute la partie structure (si...alors...sinon...)
Pour plus d'infos je te conseille vivement de faire un tour dans la doc SQL (ou MySQL).

a moins que tu puisse utiliser des requetes de ce type :
INSERT INTO matable (champ_1,champs_nom,...,champs_n) VALUES (val_1,val_nom,...,val_n)
WHERE NOT EXIST (SELECT nom FROM matable WHERE matable.nom='val_nom')
ou encore :
INSERT INTO matable (champ_1,champs_nom,...,champs_n) VALUES (val_1,val_nom,...,val_n)
WHERE val_nom NOT IN (SELECT nom from matable)

Ce type de boucle marche pour des SELECT en SQL pur mais je ne sais pas si ca marche avec des INSERT ni avec MySQL.
Par contre si ca marche cela risque d'être tres long ... (à cause du 2 eme SELECT imbriqué)

[ Message édité par : capcaverne : 15-12-2003 13:35 ]
hexagone hexagoneicon_post
dans la doc nexen:

les sub-select: ici

les insert-select: ici



simonkara simonkaraicon_post
merciiiii

simonkara