Bonjour,
je souhaite faire un UPDATE sur ces deux tables (version 4.1.14 de mySQL) :
CREATE TABLE `emp_members` (
`id_member` mediumint(9) NOT NULL auto_increment,
`since` datetime NOT NULL default '0000-00-00 00:00:00',
`ip` varchar(15) NOT NULL default '',
`state` enum('temp','active','banned') NOT NULL default 'temp',
`login` varchar(20) NOT NULL default '',
`pwd` varchar(20) NOT NULL default '',
`civility` enum('1','2','3') NOT NULL default '1',
`firstname` varchar(30) NOT NULL default '',
`name` varchar(30) NOT NULL default '',
`email` varchar(30) NOT NULL default '',
`birthdate` date NOT NULL default '0000-00-00',
`address_1` varchar(100) NOT NULL default '',
`address_2` varchar(50) NOT NULL default '',
`zip` varchar(10) NOT NULL default '',
`city` varchar(30) NOT NULL default '',
`country` smallint(6) NOT NULL default '0',
`last_login` datetime NOT NULL default '0000-00-00 00:00:00',
`points` mediumint(9) NOT NULL default '0',
`earning` mediumint(9) NOT NULL default '0',
`sponsor` mediumint(9) NOT NULL default '0',
PRIMARY KEY (`id_member`)
)Je cherche à modifier le champ "emp_members.sponsor" et le champ "emp_godsons.state" lorsque ces derniers valent respectivement "0" et "temp".CREATE TABLE `emp_godsons` (
`id_godson` mediumint(9) NOT NULL auto_increment,
`since` datetime NOT NULL default '0000-00-00 00:00:00',
`member` mediumint(9) NOT NULL default '0',
`state` enum('temp','valid') NOT NULL default 'temp',
`code` varchar(20) NOT NULL default '',
`agency` enum('3','4') NOT NULL default '3',
PRIMARY KEY (`id_godson`),
UNIQUE KEY `uniq` (`code`,`agency`)
)
Egalement, "emp_members.id_member" doit être différent de "emp_godsons.member".
Ce qui donne :
Si un enregistrement de "emp_members" répond à ces critères, mais qu'il y a (par exemple) 3 enregistrements dans la table "emp_godsons", tous ceux-là auront leur champ "state" modifié en "valid" alors qu'un seul d'entre eux aurait du être modifié.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 UPDATE emp_members m, emp_godsons g SET m.sponsor = g.member, g.state = "valid" WHERE m.sponsor = "0" AND m.id_member != g.member AND g.state = "temp"
Je vois pas comment régler ce problème, une idée ?
Merci !
Partager