Avatar billede big_ossi Nybegynder
21. juni 2009 - 19:47 Der er 4 kommentarer og
1 løsning

opret automatisk ny tabel hver d. 1 i md

Hej Exp'er

Jeg har nogle sites hvor jeg laver en log i min database over hvornår de logger på og med hvilken ip.

har kørt med den snart 1 år og den er meget lang.

Ville gerne den automatisk oprettede en ny tabel i min mysql hver d. 1 i md med månedens navn eller nummer og årstal

Hvordan gør lige det ?

lidt info om min database som evt skal bruges.

CREATE TABLE `log_2008` (
  `id` int(11) NOT NULL auto_increment,
  `brugerid` varchar(225) NOT NULL,
  `time` varchar(255) default NULL,
  `ipadresse` text NOT NULL,
  `reff` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=85432 ;
Avatar billede majbom Novice
21. juni 2009 - 19:56 #1
enten skal du have et cronjob/planlagt opgave kørende på din server eller hos et "firma" der tilbyder sådanne services, som kører hver den 1.

og du har jo koden den til at oprette tabellen, så er det jo bare at bruge date() til at finde de tal du vil bruge til at identificere tabellen med.

et alternativ kunne være at lave en fil med månedens navn, ved månedens udgang og smide tabellens indhold i filen, rydde tabellen, og starte forfra (håber det gav mening?)

på den måde har du kun én tabel og resten ligger i filer.
Avatar billede coderdk Praktikant
21. juni 2009 - 20:15 #2
Hvad med


$sql = "CREATE TABLE log_" . date( "Y_m", strtotime("-1 month") ) . " AS SELECT * FROM log";

efterfulgt af "TRUNCATE TABLE log"? Så kan du bruge samme tabel til logging, men har backup'en i en anden tabel
Avatar billede mrgumble Nybegynder
21. juni 2009 - 20:30 #3
Men du skal jo huske på, at du i din logging-rutiner skal tage forbehold for samme navngivning af tabeller.

Jeg foreslår, at du (manuelt) flytter alle indgange for en bestemt måned væk fra din tabel og over i en backup-fil. Det kan du gøres simpelt med en klausul på din SQL-sætning, noget alá:
"WHERE MONTH(logdate) = MONTH(NOW))"

Så slipper du også for at spekulere i, om din cronjob kører på det rigtige tidspunkt og ændring af tabelnavne mm.
Avatar billede coderdk Praktikant
21. juni 2009 - 22:25 #4
I øvrigt skal der ikke være AS i min SQL:

$sql = "CREATE TABLE log_" . date( "Y_m", strtotime("-1 month") ) . " AS SELECT * FROM log";

skulle have været

$sql = "CREATE TABLE log_" . date( "Y_m", strtotime("-1 month") ) . " SELECT * FROM log";

...så vidt jeg husker ;)
Avatar billede big_ossi Nybegynder
27. juli 2009 - 14:42 #5
mrgumble > har testet dit forslag og det kan jeg godt bruge takker ;)
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