Avatar billede sth Novice
05. november 2011 - 13:12 Der er 2 kommentarer og
1 løsning

Hjælp til trigger

jeg vil gerne kunne lave en trigger, kan i hjælpe mig?

jeg har følgende tabel:

CREATE TABLE `prod_kost_per_unit` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `segment` char(15) NOT NULL DEFAULT '',
  `mdr` smallint(6) NOT NULL DEFAULT '0',
  `aar` int(11) NOT NULL DEFAULT '0',
  `unit_qty` float DEFAULT '0',
  `cust` float DEFAULT '0',
  `cust_pr_unit` float DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=FIXED;

kan man så lave en trigger der automatisk indsætter "unit_qty" / "cust" i det felt der heder "cust_pr_unit" når der er data i både "unit_qty" og "cust" altså ikke hvis der mangler data i det ene felt.

Hvordan gør jeg?
05. november 2011 - 14:02 #1
Du fortæller ikke hvilke værdier der skal komme i cust_pr_unit.  Jeg gætter på, at det skal være cust divideret med unit_qty.  Jeg gætter videre på, at du vil have cust_pr_unit beregnet både når du har indsat en ny række og når du har opdateret en række.  I så fald skal du bruge to triggers, AFTER INSERT og AFTER UPDATE.  Princippet er følgende (ikke tested, hurtigt skrevet ned som et eksempel der muligvis skal rettes til med syntax:)

CREATE TRIGGER tr_avg_insert AFTER INSERT ON prod_cost_pr_unit
FOR EACH ROW UPDATE prod_cost_pr_unit SET new.cust_per_unit = new.cust/new.unit_qty WHERE new.cust IS NOT NULL AND unit_qty IS NOT NULL

Og for updates det samme, bare CREATE TRIGGER tr_avg_update AFTER UPDATE ....

Men tillad mig denne bemærkning (som jeg er klar over du ikke bad om:)  Det regnes generelt for en dårlig ide at bevare i en database værdier der kan beregnes ud fra andre værdier.  Det beregnes normalt, når værdierne trækkes ud.  Lad os antage, at du ikke har feltet prod_cost_pr_unit.  Så vil du have en udskrift af cust per unit for de id'er der har både unit_qty og cust fyldt ud.  Det får du ved sådan en forespørgsel:

SELECT id, cust/unit_qty average FROM prod_cost_per_unit WHERE cust IS NOT NULL AND unit_qty IS NOT NULL
Avatar billede sth Novice
06. november 2011 - 00:09 #2
Hej Christian_Belgien
jo du har helt ret i din antagelse, jeg tester det i morgen og så høre du fra mig.
vedr om det re en god ide eller ej at gemme et beregnet fejl, så er jeg ikke uenig med dig, og baggrunden for dette er også mere at få lavet den første trigger.
jeg er godt med på at man oftes bruge en trigger til at skrive i en anden tabel når der er sket noget i en den første tabel.
08. november 2011 - 05:44 #3
Hvad så, sth, fik du kikket på mit indlæg?  Var det til nytte?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester