Avatar billede gregorian Nybegynder
18. september 2004 - 11:16 Der er 14 kommentarer og
1 løsning

fra tabel til tabel_backup hvordan?

Jeg har et par tabeller hvor jeg vil lave en backup funktion til, som i dette tilfælde hedder BK_nyheder. MÅden jeg har tænkt mig at gøre det på er at oprette tabellen BK_nyheder_backup hvor jeg har en backup_id og en backup_date hvor jeg ud fra de 2 vil holde styr på de 5 seneste ændringer der er foretaget..
Derfor vil der sikkert være redundante indlæg i tabellen, men til gengæld vil der altid være under 100 indlæg deri.

Nu er mit spørgsmål hvordan jeg med én sql sætning tager og overfører indholdet fra min tabel (BK_nyheder) og indsætter i min backup tabel (BK_nyheder_backup)?


Hvis du derimod har en smartere måde at løse min problemstilling på eller ser et stort problem så ret mig endelig (især med min db struktur)

tak på forhånd




Mine tabeller:

CREATE TABLE BK_nyheder (
  id int(3) NOT NULL auto_increment,
  dato timestamp(14) NOT NULL,
  overskrift text NOT NULL,
  text text NOT NULL,
  billedeserie_id int(3) default NULL,
  PRIMARY KEY  (id)
) TYPE=MyISAM;


CREATE TABLE `BK_nyheder_backup` (
  `backup_id` int(3) NOT NULL default '0',
  `backup_date` timestamp(14) NOT NULL,
  `id` int(3) NOT NULL default '0',
  `dato` timestamp(14) NOT NULL default '00000000000000',
  `overskrift` text NOT NULL,
  `text` text NOT NULL,
  `billedeserie_id` int(3) default NULL,
  PRIMARY KEY  (`backup_id`,`backup_date`),
  UNIQUE KEY `backup_id` (`backup_id`)
) TYPE=MyISAM;
Avatar billede arne_v Ekspert
18. september 2004 - 13:10 #1
Jeg ville helt klart vælge kun at have en enkelt tabel.

Eventuelt med et felt aktiv der markerer om rækken er aktiv eller ej.

Hvis man skal hente de nyeste er der bare ORDER BY tidsfelt LIMIT n.

Det er alt for besværligt at flytte fra en tabel til en anden tabel.
Avatar billede arne_v Ekspert
18. september 2004 - 13:10 #2
Hvis du vil gøre det så skifte fra MyISAM til InnoDB og lave flere
SQL sætninger i en transaktion (så vil enten alle blive udført eller ingen).
Avatar billede gregorian Nybegynder
18. september 2004 - 16:13 #3
tror det er bedre på den måde... altså at indsætte i samme tabel..

hvem stadigvæk,, hvordan skulle man gøre så man overførte indholdet imellem 2 tabeller?
Avatar billede arne_v Ekspert
18. september 2004 - 16:16 #4
SELECT * FROM BK_nyheder WHERE id=X

INSERT INTO BK_nyheder_backup VALUES (.....);

DELETE FROM BK_nyheder WHERE id=X

(og som sagt vil transaktions support være en god ting)
Avatar billede gregorian Nybegynder
18. september 2004 - 17:47 #5
mysql(SELECT * FROM BK_nyheder WHERE id=X INSERT INTO BK_nyheder_backup VALUES (.....) DELETE FROM BK_nyheder WHERE id=X);

?

kan det virkelig gøres sådan eller er det skrevet som værenden flere sql sætninger?
er nysgerrig om hvordan du gør det i en nemlig
Avatar billede arne_v Ekspert
18. september 2004 - 17:49 #6
Det er 3 SQL sætninger.

Og ..... skal erstattes af nogle værdier (nogle konstanter og nogle værdier
fra den første query.
Avatar billede gregorian Nybegynder
18. september 2004 - 17:50 #7
okay.. den kunne jeg så godt selv.
kan det gøres i en sætning? dvs et enkelt opkald til min db?
Avatar billede arne_v Ekspert
18. september 2004 - 17:50 #8
De 2 første SQL sætninger kan muligvis godt erstattes af en enkelt

INSERT INTO BK_nyheder_backup SELECT ... SELECT * FROM BK_nyheder WHERE id=X

(igen skal ... erstattes af noget)
Avatar billede arne_v Ekspert
18. september 2004 - 17:51 #9
Jeg mener at MySQL normalt tillader at fyre flere SQL sætninger af sted i et kald
bare de er adskilt af semikolon.
Avatar billede gregorian Nybegynder
18. september 2004 - 17:51 #10
.... = ?
union?
Avatar billede arne_v Ekspert
18. september 2004 - 17:52 #11
Nej - copy paste fejl !!!

:-)

INSERT INTO BK_nyheder_backup SELECT ... FROM BK_nyheder WHERE id=X
Avatar billede gregorian Nybegynder
18. september 2004 - 17:54 #12
så vidt jeg ved kan jeg ikke, i hvert fald på min server, lave den sætning der.. der melder den bare fejl.. der skal den deles op i 2
Avatar billede arne_v Ekspert
18. september 2004 - 17:57 #13
Så må du jo lave 2 eller 3
Avatar billede gregorian Nybegynder
18. september 2004 - 18:08 #14
tak for hjælpen da..

smid et svar og pointene vil komme.
Avatar billede arne_v Ekspert
18. september 2004 - 19:08 #15
svar
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