Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/11/2007, 17h38   #1
Invité de passage
 
Inscription : septembre 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 28
Points : 4
Points : 4
Par défaut update = insert

Bonjour j'ai cherché dans les tuto mais je suis chez un ami qui a une disque dur de 4go dc je ne peux telecharger l'integralité des cours et ca n'est pas dans la faq :S

Ma question est : j'ai une table, et à chaque id correspond entre autre une valeur. Dans ma fonction, je souhaite :
-si il n'y a pas d'entrée pour tel id, en creer une
-si il y en a une, la mettre à jour, qu'il n'y ait pas de doublons en tout cas!

voila c'est bete, mais insert insere et update met à jour (il faut donc que ca existe).
Comment faire ca en une requete proprement plz?
polopollo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2007, 20h17   #2
Expert Confirmé
 
Avatar de yiannis
 
Inscription : septembre 2005
Messages : 1 499
Détails du profil
Informations personnelles :
Âge : 47

Informations forums :
Inscription : septembre 2005
Messages : 1 499
Points : 2 563
Points : 2 563
Bonjour,

si ta version de mysql est supérieur ou égale a la 4.1.0, tu peux utiliser la clause on duplicate key insert
__________________
"Ce besoin de remords qui précède le Mal, que dis-je ! qui le crée..." E. CIORAN
yiannis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2007, 10h15   #3
Invité de passage
 
Inscription : septembre 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 28
Points : 4
Points : 4
merci! c'est exactement ce que je cherchais, je viens de mieux chercher sur le net et ma requete finirait comme ca :

Code :
1
2
3
INSERT INTO ma_table
SET son_texte='le nouveaux truc', user_id='id du mec de la table originale'
ON DUPLICATE KEY UPDATE son_texte='le nouveaux truc';
si je ne me trompe pas
(sachant que ma table contient d'autres champs plus ou moins importants)

là ca fera que pour ma_table, à la ligne de l'id du mec, si elle existe pas elle est créé, si elle existe seul mon champ "son_texte" est mis à jour sans toucher aux autres infos de la ligne (par exemple "ma_table" contient la couleur de ses yeux, qui n'est pas importante, mais que je ne souhaiterais pas perdre si je met à jour "son_texte")

Je met le post en "résolu" si j'ai faux quelque part dit le moi

merci encore!
polopollo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2007, 16h57   #4
Nouveau Membre du Club
 
Avatar de Shinn77
 
Inscription : juin 2007
Messages : 51
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : juin 2007
Messages : 51
Points : 27
Points : 27
Envoyer un message via ICQ à Shinn77 Envoyer un message via MSN à Shinn77
Code :
1
2
INSERT INTO ma_table
(son_texte, user_id) VALUES('le nouveaux truc', 4) ON DUPLICATE KEY UPDATE son_texte='le nouveaux truc';
non?
__________________
Shinn77, Till the End of Time

"Celui qui sait qu'il ne sait pas, éduque le."
"Celui qui sait qu'il sait, écoute le."
"Celui qui ne sait pas qu'il sait, éveille le."
"Celui qui ne sait pas qu'il ne sait pas, fuis le."
Shinn77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2007, 20h02   #5
Invité de passage
 
Inscription : septembre 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 28
Points : 4
Points : 4
ça revient au même il me semble non?
polopollo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2007, 13h45   #6
Invité de passage
 
Inscription : septembre 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 28
Points : 4
Points : 4
Erf ca ne marche pas en fait
Vu que le champ text change, ca en insert un nouveau à chaque fois :S

Et j'ai essayé avec la methode de shinn77, ca ne change rien, et essayé en changeant les champs de position (user_id en premier) mais inutile en fait

suis-je condamné à effectuer plusieurs reuquete et les analyser avec php? ((
polopollo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2007, 14h23   #7
Invité de passage
 
Inscription : septembre 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 28
Points : 4
Points : 4
Apres avoir continué de chercher, mon erreur est du au fait que je n'utilise betement pas une clé unique dans ma requete originale.
Comme de toute maniere il faudrait que je la cherche je suis obligé de faire une requete en plus, je vais donc me cantoner à un

Code :
SELECT * WHERE user_id=XXX
puis un test avec "if (mysql_num_rows($res))" sur le resultat de ma requete (en php)
et si ca passe un update
Si ca foire un insert

merci quand meme ^^
polopollo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2007, 14h27   #8
Membre éprouvé
 
Avatar de nounetmasque
 
Inscription : janvier 2003
Messages : 491
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 491
Points : 488
Points : 488
Pour que ça fonctionne, il faut que user_id soit défini comme clé primaire sur ta table !

Code :
1
2
3
 
INSERT INTO ma_table
(son_texte, user_id) VALUES('le nouveaux truc', 4) ON DUPLICATE KEY UPDATE son_texte=value(son_texte);
__________________
"Dieu reste muet, si seulement nous pouvions convaincre l'être humain d'en faire autant."
nounetmasque est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h15.


 
 
 
 
Partenaires

Hébergement Web