begin process at 2012 05 31 00:21:38
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

MySQL

 > 

INSERT INTO [...] ON DUPLICATE KEY UPDATE [...]


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

INSERT INTO [...] ON DUPLICATE KEY UPDATE [...]

jeudi 21 janvier 2010 à 14:34:26 | INSERT INTO [...] ON DUPLICATE KEY UPDATE [...]

xactise

Membre Club
Bonjour à tous après avoir tenter de poser une question sur le forum SQL de CS, qui est peu fréquenté je me suis dit que je trouverai peut-être une solution avec mes amis de PHP CS ;)



avec une requete du type
INSERT INTO [...] ON DUPLICATE KEY UPDATE [...]
peux t-on savoir si c un INSERT ou un UPDATE qui à été effectué ?


D'avance merci


PS : http://www.sqlfr.com/forum/sujet-INSERT-INTO-ON-DUPLICATE-KEY-UPDATE_1398353.aspx


L0rD...
jeudi 21 janvier 2010 à 16:17:56 | Re : INSERT INTO [...] ON DUPLICATE KEY UPDATE [...]

tpoinsot

Bonjour,
non, je ne crois, mais si tu as un autoincrement et un timestamp dans l'insert/update, tu auras tout.
Tu as la valeur max de l'autoincrement avant la requête et après exécution les plus grands sont les insert, quant aux plus petits, ce sera avec le timestamp que tu connaitras les update.

Quelqu'un a une autre idée ?


thip
jeudi 21 janvier 2010 à 16:22:10 | Re : INSERT INTO [...] ON DUPLICATE KEY UPDATE [...]

lenono75

Réponse acceptée !
Bonjour,

Avec mysql, tu auras en retour :
"Query OK, 2 rows affected"
si c'était un update. Mysql considère qu'il y a eu 2 opérations, même si en fait il n'y en n'avait qu'une.
"Query OK, 1 row affected", signifiera qu'il y a bien eu un insert.

Bonne journée,

Arnaud

PS : je poste cross avec http://www.sqlfr.com/forum/sujet-INSERT-INTO-ON-DUPLICATE-KEY-UPDATE_1398353.aspx volontairement pour faire connaitre la réponse.
jeudi 21 janvier 2010 à 16:31:38 | Re : INSERT INTO [...] ON DUPLICATE KEY UPDATE [...]

tpoinsot

@lenono75 : c'est vrai pour un seul enregistrement à traiter; mais c'est peut-être ce que voulait xactise. En revanche, quand on a n enregistrements à traiter ... on peut savoir le nombre d'insert et le nombre d'update mais pas qui.
En fait, ça dépend de ce qu'on veut, et finalement, je crois que xactise ne veut savoir que pour un seul enregistrement, don il sait lequel.


thip
jeudi 21 janvier 2010 à 16:41:08 | Re : INSERT INTO [...] ON DUPLICATE KEY UPDATE [...]

xactise

Membre Club
Réponse acceptée !

On ne peut pas avoir N enregistrement tpoinsot sinon il n'y aurait pas ON DUPLICATE KEY ;)

Merci

je venais jsute de trouver la réponse sur php.net

If you use "INSERT INTO ... ON DUPLICATE KEY UPDATE" syntax, mysql_affected_rows() will return you 2 if the UPDATE was made (just as it does with the "REPLACE INTO" syntax) and 1 if the INSERT was.

So if you use one SQL request to insert several rows at a time, and some are inserted, some are just updated, you won't get the real count.


Merci je valide



L0rD...
jeudi 21 janvier 2010 à 16:50:05 | Re : INSERT INTO [...] ON DUPLICATE KEY UPDATE [...]

lenono75

Content que ça te plaise, eu quelques soucis aussi il y a quelques mois...
jeudi 21 janvier 2010 à 16:54:05 | Re : INSERT INTO [...] ON DUPLICATE KEY UPDATE [...]

tpoinsot


Si, tu peux avoir plusieurs enregistrements !!! c'est même très pratique.

Tiens, vas voir la doc.

Tu verras un exemple :

insert into test2 select * from test1 on duplicate key update a = 'REMOVE-ME';

mysql> select * from test2;


+----+-----------+------+
| id | a | b |
+----+-----------+------+
| 1 | a1 | b1 |
| 2 | REMOVE-ME | b2 |
| 4 | a1 | b3 |
+----+-----------+------+

thip
jeudi 21 janvier 2010 à 17:15:16 | Re : INSERT INTO [...] ON DUPLICATE KEY UPDATE [...]

xactise

Membre Club


Si a=1 OR b=2 trouve plusieurs lignes, uniquement une ligne sera mise à jour! En général, il faut éviter d'utiliser la clause ON DUPLICATE KEY sur des tables avec des clés UNIQUE multiples.

Depuis MySQL version 4.1.1, on peut utiliser la fonction VALUES(col_name) pour faire référence à la valeur de la colonne dans la clause INSERT d'une commande INSERT ... UPDATE : c'est la valeur qui sera insérée s'il n'y a pas de conflit de clé. Cette valeur est particulièrement utile dans les commandes INSERT ... UPDATE et retourne NULL sinon.



L0rD...
lundi 25 janvier 2010 à 15:38:41 | Re : INSERT INTO [...] ON DUPLICATE KEY UPDATE [...]

tpoinsot

Il s'agit effectivement d'un exemple désastreux sur une clef primaire constituée de 2 champs. Danger.

Mais la page suivante de la documentation donne un exemple sans contestation :

INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);

That statement is identical to the following two statements:

INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=3;
INSERT INTO table (a,b,c) VALUES (4,5,6)
ON DUPLICATE KEY UPDATE c=9;

maintenant c'est comme tu veux, ton problème était résolu. Mais c'est dommage de ne pas voir plus loin.

thip


Cette discussion est classée dans : insert, key, update, into, duplicate


Répondre à ce message

Sujets en rapport avec ce message

INSERT puis UPDATE [ par bricethenetman ] Salut j'ai un formulaire d'inscription qui aurait pu se réduire à une page mais pour des soucis d'esthetique je l'ai divisé en deux form_inscr.php et php bizarre.. à l'aide. [ par bossun ] salut, j'ai 2 requetes... une insert l'autre update... 1. $sql ="Insert ...."; $result = mysql_query($sql); 2.$sqlUpd ="Update..." $result2 = mysql_q Insert into de (censure) [ par galldup ] Salut,Pourquoi ma requete excécuté sous PHP 4.3.6 vers SQL SERVER 2000 ne marche pô ?//Connection...//Selection de la base...//Lancer la requete !$que insert into [ par ptifennec ] Bonjour, j' affiche 3 liste_box où je demande à l'utilisateur de rentrer 3 mots clés... ces derniers sont réferencés dans une base de données d'une ta ma rqte ne s'execute [ par alonsyl ] salut,j'utilise le tandem "php-access".les requetes suivantes ne fonctionnent pas:$intitule = addSlashes($intitule);$observations = addSlashes($observ bonjour j'ai un probleme avec un INSERT INTO [ par timolerigolo ] Bonjour,Voila j'ai une page d'inscription avec 2 INSERT INTO et je voudrais alimanté 2 requéte SQL mé le problème cé que sa alimante que une seule req REQUETE DE TRI [ORDER BY] [ par ] Bonjour !Je souhaiterais pouvoir classer mes données selon 3 critères : par nom de fiche, par date ou par thème.Les requêtes seules fonctionnent (quan questions sur INSERT INTO [ par LaTatadu91 ] salut;je veux inserer plusieurs lignes dans ma table je me ser de insert into dois je en faire autant que de lignes ou ya un autre moyen??? Tableau à 3 dimensions [ par nougitch ] Bonjour, Le principe est rès simple : des élèves (colonnes), des matières (lignes) et des notes (cellules). Impossible d'afficher la note de chaque é Besoin Aide PHP update & insert [ par Dexterage ] Bonjour a tous !voila jai un tit soucis, en fait qd je fais une requete insert ou update, et qu'un de mes champs de formulaire posséde un apostrophe,


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,170 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales