Avatar billede htx98i17 Professor
29. august 2017 - 10:46 Der er 15 kommentarer og
1 løsning

UPDATE


UPDATE tblstock tst,tblartikler ta SET tst.ean = ta.ean WHERE ta.id = ?


vil ovenstående sql opdatere alle rækker i tblstock eller kun den ene række som  har relation det det unikke id i tblartikler?

Jeg har nemlig en funktion som skal opdatere et produkts EAN-nummer i varedatabasen. Ovennævnte SQL skal så opdatere EAN-nummeren som produktet er registreret med i beholdningen.
Avatar billede michael_stim Ekspert
29. august 2017 - 10:58 #1
I og med du har WHERE ta.id med tager den kun den med det id du har valgt.
Avatar billede michael_stim Ekspert
29. august 2017 - 11:02 #2
Et trik er at altid tage en SELECT för du körer en UPDATE eller DELETE, så kan du se präcis hvad du ändrer/fjerner.

Ser nu at du har valgt 2 tabeller, kan man det i MySQL?
Avatar billede michael_stim Ekspert
29. august 2017 - 11:03 #3
Det kunne man.
Avatar billede michael_stim Ekspert
29. august 2017 - 11:06 #4
SELECT  tst.ean AS updated, ta.ean FROM tblstock tst, tblartikler ta WHERE ta.id=?
Avatar billede michael_stim Ekspert
29. august 2017 - 11:25 #5
Men nu når jeg kigger närmere på den så kommer jeg også lidt i tvivl. Har du ikke noget der er forbinder de to tabeller? Så kunne man köre en JOIN.

UPDATE tblstock tst
INNER JOIN tblartikler ta ON ta.tstid = tst.taid
SET tst.ean = ta.ean
WHERE ta.id=?
Avatar billede htx98i17 Professor
29. august 2017 - 11:53 #6
Jeg startede også ud med en JOIN, men umiddelbart konkluderede jeg at man ikke kunne bruge JOIN i en UPDATE, men jeg ved ikke?

Min JOIN så således ud:
UPDATE tblstock tst JOIN tblartikler ta ON ta.id = ? SET tst.ean = ta.ean
Avatar billede htx98i17 Professor
29. august 2017 - 11:56 #7
Kunne det gøre en foreskel at tilføje en WHERE der begrænser opdateringen af antal rækker i tblstock?

UPDATE tblstock tst JOIN tblartikler ta ON ta.id = ? SET tst.ean = ta.ean WHERE tst.ean = ta.ean
Avatar billede michael_stim Ekspert
29. august 2017 - 12:01 #8
Men JOIN skal väre den der kobler/JOINER de to tabeller, altså ikke ?. Den skal du bruge i din WHERE. Og den du skrev til sidst opdatere ingenting (hvis nu din JOIN var skrevet rigtigt), for der vil tst.ean og ta.ean altid väre det samme.
Avatar billede htx98i17 Professor
29. august 2017 - 12:08 #9
De relevante info om tabeller ser således ud:

tblstock: ean, antal
tblartikler: id, ean

tblartikler.ean relaterer til tblstock.ean

Men jeg kender kun:
$_GET['id'] // produktets id
$_GET['ean'] //det nye ean-nummer som tblstock.ean skal opdateres med.
Avatar billede michael_stim Ekspert
29. august 2017 - 13:07 #10
Så burde du kunne köre:

UPDATE tblstock tst
INNER JOIN tblartikler ta ON ta.ean = tst.ean
SET tst.ean = ?
WHERE ta.id = ?
Avatar billede michael_stim Ekspert
29. august 2017 - 13:43 #11
Men forstår ikke rigtigt tanken her. Fra starten af, har de begge samme EAN, men så skal stock opdateres med et andet EAN men ikke artikler?
Avatar billede htx98i17 Professor
29. august 2017 - 13:49 #12
Jo, tblartikler.ean bliver opdateret også i et andet kald.
Avatar billede arne_v Ekspert
29. august 2017 - 16:38 #13
UPDATE mere flere tabeller er noget rod. Selv efter at have laest dokumentation aner jeg ikke hvad den UPDATE goer.

Jeg tror at du skal brugen en af:

UPDATE tblstock SET ean = (SELECT ean FROM tblartikler WHERE id = tblstock.id) WHERE id = ?

UPDATE tblstock SET ean = (SELECT ean FROM tblartikler WHERE id = tblstock.id)

alt afhaengig af om du vil opdatere en elle rmange raekker.
Avatar billede michael_stim Ekspert
29. august 2017 - 16:44 #14
#13
I 99,9% har du ret Arne, men tror ikke han kan bruge de forslag du har givet.

1. Der er ikke noget tblstock.id (det kan löses med den getvariabel han har)
2. EAN i tblstock og tblartikler er ens og skal opdateres med värdien fra en getvariabel
Avatar billede michael_stim Ekspert
29. august 2017 - 16:49 #15
Jeg tror nästen at min i #10 vil fungere. Jeg ved godt at tro kan man göre i kirken, derfor skal det jo testes först, hvilket jeg ikke har gjort og ikke har mulighed for lige nu.
Avatar billede htx98i17 Professor
29. august 2017 - 19:21 #16
Ved I hvad. Jeg er faktisk kommet i tanke om at ean-nummeret i tblstock ikke skal ændres, fordi der kan være flere produkter i varedatabasen med samme ean-nummer.

Beklager det spildte arbejde. Tak for hjælpen.
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

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



IT-JOB