|
simonkara 14
| Posté : 14-12-2003 18:17
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 |  Profil
|
|
snipe 2450
| Posté : 14-12-2003 20:14
tu fait une requette avant qui verifie son existance, et si le nombre de ligne retourné est egale a 0 allors tu insert :) |  Profil E-mail
|
|
simonkara 14
| Posté : 14-12-2003 21:17
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 ??? |  Profil
|
|
Tribal-Dolphin 4374
| Posté : 15-12-2003 09:10
ben c du mysql ça !!
tu te connecte à ton serveur mysql(terminal) et tu fait tes requêtes. |  Profil
|
|
capcaverne 395
| Posté : 15-12-2003 09:49
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 |  Profil E-mail www
|
|
simonkara 14
| Posté : 15-12-2003 10:28
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 |  Profil
|
|
simonkara 14
| Posté : 15-12-2003 10:31
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
Simonkara |  Profil
|
|
Tribal-Dolphin 4374
| Posté : 15-12-2003 12:01
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. |  Profil
|
|
capcaverne 395
| Posté : 15-12-2003 13:29
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 ] |  Profil E-mail www
|
|
hexagone 188
| Posté : 18-12-2003 12:41
dans la doc nexen:
les sub-select: ici
les insert-select: ici
|  Profil www
|
|
simonkara 14
| Posté : 18-12-2003 20:58
merciiiii
simonkara |  Profil
|
|