Avatar billede zac Nybegynder
17. oktober 2003 - 20:15 Der er 4 kommentarer og
1 løsning

Hvordan update et felt i en tabel, m.felt hentet fra select join?

Ifølge http://mysql.us.themoes.org/doc/en/UPDATE.html gælder det, at
UPDATE [LOW_PRIORITY] [IGNORE] tbl_name
    SET col_name1=expr1 [, col_name2=expr2, ...]
    [WHERE where_definition]
    [ORDER BY ...]
    [LIMIT #]

Kan denne WHERE specification omfatte en SELECT, der laver JOIN?

EX: Man finder timetal for medlem = ’Nielsen’ (godt at se, hvad man har, før man ændrer på noget):
$result = mysql_query( "SELECT
k.id AS k_id,
k.medlem AS k_medlem,
t.id AS t_id,
t.medlemnr AS t_medlemnr,
t.opgave AS t_opgave,
t.dato AS t_dato,
t.timetal AS t_timetal
FROM
medlem AS k,
medlem_bidrag AS t
WHERE k.medlem = 'Nielsen' AND k.id = t.id
");
while ($row = mysql_fetch_array($result)) {
$k_id                    = $row["k_id"];
$k_kunde        = $row["k_kunde"];
$t_id                = $row["t_id"];
$t_medlemnr              = $row["t_medlemnr"];
$t_opgave         = $row["t_opgave"];
$t_dato            = $row["t_dato"];
$t_timetal            = $row["t_timetal"];
echo "$t_timetal<br><br>";
}

Hvordan kombinere med UPDATE til, at alle medlemmer = Nielsen (fra tabel medlem) skal ændres til timetal = 4 (i tabel medlem_bidrag)?

Man kan jo ikke sige:
$result = mysql_query( ”UPDATE medlem_bidrag SET timetal = ’4’ WHERE k.medlem = 'Nielsen' AND k.id = t.id ....) ---
--- WHERE-klausulen er hentet fra den anden tabel.

Så hvordan indsættes eller kombines UPDATE med SELECT af JOIN?
Avatar billede zac Nybegynder
17. oktober 2003 - 20:30 #1
Det ser ud som om min MySQL ver. 3.23.58 ikke er ny nok til den slags.

Sidst i http://www.webmasterworld.com/forum88/1518.htm står der man skal have ver. 4 for at kunne den slags.
Vil prøve eksempler derfra...
Avatar billede htm Nybegynder
17. oktober 2003 - 21:25 #2
Det lyder som om at det du vil er subselects. dvs. Noget ala

UPDATE tabel SET felt='value' WHERE feltnavn IN(SELECT * from tabel)

Men dette er først muligt i MySQL version 4.1 som er i aplha relase.

Derfor vil jeg anbefale dig at lave din update på en anden facon.

Hvad er det du vil have?
Avatar billede zac Nybegynder
17. oktober 2003 - 22:29 #3
Exemplet ovenfor finder timetal fra tabellen medlem_bidrag, hvor medlem fra tabellen medlem er lig Nielsen og de to tabellers id er identiske.

Det timetal skal updates for (kun) denne select - hvordan?
Avatar billede htm Nybegynder
17. oktober 2003 - 22:34 #4
Hmm den kan jeg ikke lige se hvordan du skal kunne lave den i ren mysql. men du kan lave noget php

$query = mysql_query("SELECT ....") or die(mysql_error());

while($row = mysql_fetch_array($query) {
  mysql_query(UPDATE ...) or die(mysql_error());
}

Det mener jeg ville kunne gøre det.
Avatar billede zac Nybegynder
21. oktober 2005 - 00:27 #5
lukker spm. for tiden - lidt sent, sorry!
tak til htm for kommentarerne...
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