09. oktober 2007 - 21:47Der er
15 kommentarer og 2 løsninger
Hjælp til sætning
Jeg har en tabel med bl.a. felterne content_id, prop_name og content. content_id og prop_name danner en unik nøgle. Jeg vil gerne gøre følgende: vælge alle rækker hvor prop_name='content_dk', ændre prop_name til 'content_no' for de valgte rækker, indsætte de valgte (og rettede) rækker i samme tabel som de kom fra (altså så de oprindelige rækker ikke ændre, men snarere kopieres). Hvordan kan jeg gøre dette?
Mit eget gæt er at det skal være en update inden i en select eller noget....?
Tror ikke du skal lave en update, den vil bare ændre dine nuværende værdier og ikke indsætte nogle nye som du gerne vil. Du skal derimod lave en insert, hvor du henter værdierne fra din egen tabel. Jeg har prøvet noget her, men er bestemt ikke sikker på det virker, måske du skal få din kode til selv at indsætte en nye værdier. Prøv : INSERT INTO tabel ( prop_name, content ) VALUES ( 'content_no', (SELECT content FROM tabel WHERE prop_name='content_dk') )
Eller må vi jo gøre noget andet. Husk også lige at skrive din tabelnavn, det gør det lidt nemmere at lave et eksempel :-)
de andre felters indhold er ikke så vigtigt. De skal helst bare kopieres fra de oprindelige rækker. Man kunne vel også selecte rækkerne ind i en midlertidig tabel. Køre update på prop_name feltet og så selecte alle rækkerne tilbage til den oprindelige tabel?
declare done int default 0; declare continue handler for sqlstate '02000' set done = 1; declare c1 curcor for SELECT content_id, type, param1, param2, param3, content FROM cms_content_props WHERE prop_name='content_dk';
open c1 repeat fetch c1 into this_id, this_type, this_param1, this_param2, this_param3, this_content; insert into cms_content_props ( content_id, type, param1, param2, param3, content
declare done int default 0; declare continue handler for sqlstate '02000' set done = 1; declare c1 curcor for SELECT content_id, type, param1, param2, param3, content FROM cms_content_props WHERE prop_name='content_dk';
open c1 repeat fetch c1 into this_id, this_type, this_param1, this_param2, this_param3, this_content; insert into cms_content_props ( content_id, type, prop_name, param1, param2, param3, content, create_date, modified_date ) VALUES ( this_id, this_type, 'content_no', this_param1, this_param2, this_param3, this_content, NOW(), NOW() ); until done end repeat; close c1; end //
delimiter ;
Men husk lige at tage en backup, så du altid kan komme tilbage hvis dette ikke virker. Vi mangler lige en ting til, men lad mig lige vide om dette jeg har skrevet virker. Håber du har mysql version 5, ellers kommer det aldrig til at virke :-)
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.