Kytrix | Bonjour
voila j'ai une table :
CREATE TABLE `RateTable` (
`RateID` int(4) unsigned NOT NULL auto_increment,
`AreaCode` varchar(20) NOT NULL default '',
`ReselerID` tinyint(4) NOT NULL default '0',
`EffectUT` int(11) NOT NULL default '0',
`AreaID` int(2) unsigned NOT NULL default '0',
`AreaName` varchar(35) NOT NULL default '',
`Price` float NOT NULL default '0',
`InitTime` tinyint(4) NOT NULL default '0',
`IncrementTime` tinyint(4) NOT NULL default '0',
`EffectDate` date NOT NULL default '0000-00-00',
PRIMARY KEY (`RateID`),
UNIQUE KEY `AreaCode_2` (`AreaCode`,`ReselerID`,`EffectUT`),
KEY `EffectUT` (`EffectUT`),
FULLTEXT KEY `AreaCode` (`AreaCode`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=34104 ;
|
jusqu'a présent (avant l'ajout du champ RateID en auto_increment) j'utilisait REPLACE pour insérer ou mettre a jour des données.
le pb maintenant c'est que replace me change mon auto_incrément (car il effectue un DELETE avant de refaire un INSERT)
j'ai donc pensé utiliser la fonction avec ON DUPLICATE KEY ..
INSERT INTO RateTable
SELECT '' as RateId,
AreaCode,
ReselerID,
UNIX_TIMESTAMP(EffectDate) as 'EffectUT',
0 as 'AreaID',
AreaName,
Price, 0 as 'InitTime',
0 as 'IncrementTime',
EffectDate
FROM TMP_Rate
ON DUPLICATE KEY UPDATE RateID = TMP_Rate.RateID
,AreaCode = TMP_Rate.AreaCode
,ReselerID= TMP_Rate.ReselerID
,EffectUT= UNIX_TIMESTAMP(TMP_Rate.EffectDate)
,AreaID = 0
,AreaName= TMP_Rate.AreaName
,Price= TMP_Rate.Price
,InitTime= 0
,IncrementTime= 0
,EffectDate=TMP_Rate.EffectDate; |
mais apriori on peut pas pas faire un UPDATE comme cela ..
d'autres idée pour éviter de faire un test pour chaque ligne inséré.
merci.
|