Avatar billede beef12 Nybegynder
08. oktober 2004 - 10:28 Der er 10 kommentarer og
2 løsninger

lave en mysql update

Jeg har en query jeg desværre ikke kan fyre af fordi min mysql fordi min version ikke understøtter sub-selects i en update:


mysql_query("UPDATE tbl_item SET tbl_item.num_left = (SELECT (item2.num_left - tbl_ordre_items.amount)
                                        FROM tbl_ordre_items
                                        where
                                        tbl_ordre_items.ordre_id = '$ordre_id'
                                        and tbl_ordre_items.item_id = item2.item_id)
                FROM tbl_item as item2") or die(mysql_error());


Kan jeg skille sub-selecten ud på en eller anden måde vha. php så jeg kan få opdateret værdierne?

tbl_item indeholder mine varer, hvor num_left er antallet af varer tilbage på lager.
tbl_ordre_items er en intersection table som indeholder informationer om hvilke varer indgår i hvilke ordre. amount er antallet af hver enkelt vare der er bestilt.

Jeg vil derfor trække amount fra num_left, når en ordre er gennemført så varelageret holdes opdateret...

Anyone?
Avatar billede hmortensen Nybegynder
08. oktober 2004 - 10:36 #1
Måske sådan her:

$result = mysq_query("SELECT (item2.num_left - tbl_ordre_items.amount) AS a
FROM tbl_ordre_items, tbl_item
WHERE
tbl_ordre_items.ordre_id = '$ordre_id'
AND
tbl_ordre_items.item_id = tbl_item.item_id");

$a = mysql_result($result, 0);

mysq_query("UPDATE tbl_item SET tbl_item.num_left = $a");
Avatar billede beef12 Nybegynder
08. oktober 2004 - 10:43 #2
hmmm, bliver så ikke alle varer opdateret istedet for kun dem der er i ordren?

jeg prøver lige at fyre den af...
Avatar billede hmortensen Nybegynder
08. oktober 2004 - 10:45 #3
Mangler du ikke også et WHERE kriterie i din update ?

mysq_query("UPDATE tbl_item SET tbl_item.num_left = $a WHERE tbl_item.item_id = $ordre_id");
Avatar billede beef12 Nybegynder
08. oktober 2004 - 10:47 #4
yup - det ændrer alle num_left desværre
Avatar billede beef12 Nybegynder
08. oktober 2004 - 10:52 #5
item_id og ordre_id er ikke det samme. Her er et lille ER-udsnit:

tbl_ordre ----< tbl_ordre_items >----tbl_item

ordre_id hører til tbl_ordre og item_id hører til tbl_item, imens tbl_ordre_items er en intersection tabel...
Avatar billede hmortensen Nybegynder
08. oktober 2004 - 10:53 #6
Så må du ha et andet felt der kan sammenlignes på
Avatar billede beef12 Nybegynder
08. oktober 2004 - 11:00 #7
hmmm - kan man ikke benytte sig af en funktion eller while-løkke?
Avatar billede beef12 Nybegynder
08. oktober 2004 - 14:21 #8
sådan !!!!

Det her virker:

$result = mysql_query("SELECT (tbl_item.num_left - tbl_ordre_items.amount) AS a, tbl_item.item_id as b
FROM tbl_ordre_items, tbl_item
WHERE
tbl_ordre_items.ordre_id = '$ordre_id'
AND
tbl_ordre_items.item_id = tbl_item.item_id") or die(mysql_error());


while ($get = mysql_fetch_array($result)) {
$a = $get['a'];
$b = $get['b'];
mysql_query("UPDATE tbl_item SET tbl_item.num_left = '$a' where item_id = '$b'");
}
Avatar billede beef12 Nybegynder
08. oktober 2004 - 14:22 #9
du gav mig principielt halvdelen af svaret hindu. Skal jeg ikke gi' dig 30 points?
Avatar billede hmortensen Nybegynder
08. oktober 2004 - 14:30 #10
Ahh ja, jeg havde slet ik tænkt på at hive den ud også :)
Avatar billede beef12 Nybegynder
08. oktober 2004 - 15:36 #11
nej nej - jeg er ikke så dum som jeg ser ud :-p
Avatar billede beef12 Nybegynder
08. oktober 2004 - 15:41 #12
hvis du er frisk på et php spm mere så kig her: http://www.eksperten.dk/spm/548277
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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