Forums Développement Multimédia

Aller au contenu

Insert + Update dans la même requête

CODE PHP MySQL

6 réponses à ce sujet

#1 Matthieu!

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 4003 messages

Posté 21 December 2007 - 16:14 PM

Salut à tous : )

Je mets à jour un enregistrement s'il existe et je le cré s'il n'existe pas : en une seule requête.

SQL
INSERT INTO ma_table SET id = '5', id2 = '12' ON DUPLICATE KEY UPDATE champs=champs+1

OK fastoche.

Le petit soucis de cette requête, c'est qu'elle fait insert OU update et non les deux.
Si l'enregistrement n'existe pas, elle le cré mais elle ne met pas à jour mon champs en même temps : (

Du coup je perds toujours le premier + 1, une idée ?

ps : j'ai déjà eu l'idée de mettre la colonne champs par défaut à 1 mais ça ne résoud pas mon problèmepour une autre utilisation parallèle wink.gif

#2 zebden

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 1395 messages

Posté 22 December 2007 - 20:56 PM

Cette syntaxe ne fonctionne qu'avec les clés primaires et pas les index, ce que tu peux faire c'est crée un 3eme champ avec les deux identifiant comme clé primaire or se pose un soucis si par tu as

id : 1
id2 : 21

id3 (la clé primaire ) sera 121

Donc si

id : 12
id2 : 1

id3 sera aussi égale 121

Donc tu insère entre les deux ID une chaine numérique fixe genre 54321 .

comme ça en reprenant tu as

15432112
12543211

Après cette chaine est proportionnel par rapport au nombre d'entrées que tu as dans les deux tables. ET ce cas fonctionne si c'est bien une table jointure et que tu as les deux ids avant.

#3 Matthieu!

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 4003 messages

Posté 22 December 2007 - 22:36 PM

Je ne vois pas bien comment ça me permettrait de faire tout cela en une seule requête ?

#4 zebden

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 1395 messages

Posté 24 December 2007 - 15:08 PM

En gros

'INSERT INTO `tatable` SET
`MaclefUniquePrimaire` = ' . $id . $tachainenumeriquefixe . $id2 . '
`id1` = ' . $id . ',
`id2` = ' . $id2 . '
ON DUPLICATE KEY UPDATE
`champ` = `champ` + 1


ET la verif ce fait sur la clef unique MaclefUniquePrimaire puisque ça ne fonctionne pas sur des index.

Edit : Comme c'est un peu babare comme méthode, tu peux toujours faire un trigger sur l'update qui check les deux ids.

#5 Matthieu!

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 4003 messages

Posté 25 December 2007 - 11:42 AM

Bah ça fonctionne sur les 3 si tu mets MaclefUniquePrimaire + id1 + id2 en clé unique. et tu prend un autre identifiant pour clé primaire

#6 a.tyane

    Ceinture Blanche

  • Members
  • Pip
  • 8 messages

Posté 25 December 2007 - 15:47 PM

tu peu creer un trigger on insert qui te fait le champs=champs+1

#7 Matthieu!

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 4003 messages

Posté 26 December 2007 - 09:21 AM

Ouep quand je serai passé à mysql5 wink.gif



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP