Update sur plusieurs tables

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Update sur plusieurs tables

Re: Update sur plusieurs tables

par albius » 28 mai 2010, 09:13

Ok, merci bien. Je vais étudier ça...

Re: Update sur plusieurs tables

par mojorisin » 27 mai 2010, 17:14

Bonjour,
vous pouvez utiliser une jointure dans votre update comme une jointure de requete select. Cette jointure n'est pas obligé de se référer au champ a mettre à jour.

Exemple sur la structure suivante :
CREATE TABLE IF NOT EXISTS `table1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `description` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

--
-- Contenu de la table `table1`
--

INSERT INTO `table1` (`id`, `description`) VALUES
(1, 'description table 1');


CREATE TABLE IF NOT EXISTS `table2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_table1` int(11) NOT NULL,
  `description` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `id_table1` (`id_table1`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
INSERT INTO `table2` (`id`, `id_table1`, `description`) VALUES
(1, 1, 'description table 2');
La jointure se fera sur table1.id=table2.id_table1 :
UPDATE 
    table1,table2 
SET 
    table1.description = "new desc",
    table2.description = "new desc" 
WHERE 
    table1.id =1 
AND 
    table1.id = table2.id_table1;

update table1 INNER JOIN table2 ON(table1.id=table2.id_table1)
set
table1.description="description inner join",
table2.description="description inner join"
WHERE 
table1.id=1

Update sur plusieurs tables

par albius » 27 mai 2010, 15:21

Bonjour,

J'ai une donnée qui a été changée une première fois avec une requête classique dans une table:
UPDATE produits
 SET designation= "'.$prod.'", ...
WHERE idPdts = "'.$idProd.'"'// $idProd étant l\'ancienne donnée
J'aimerais maintenant répéter cette modification sur plusieurs tables à la fois, mais je ne vois pas trop comment faire. D'après la documentation, il faudrait la présence d'un champ commun entre les tables. Mais dans mon cas, ce champs (du nom de 'designation') n'est pas une clef primaire
UPDATE commandes AS c, admincom AS a, boncommandes AS b
 SET... ?
merci,