Du kan bruge mysql funktionen WEEK. For eksempel SELECT WEEK('2010-01-10' returnerer vaerdien 2.
Jeg lavede en lille tabel med et par vaerdier som jeg giver nedenfor. Forespoergslen SELECT naam, dato FROM loevstroem WHERE 2 = (SELECT WEEK(dato)) gav svaret:
navn dato navn2 2010-01-10
Her er tabellen og vaerdierne:
CREATE TABLE loevstroem(navn varchar(10), dato DATE);
INSERT INTO loevstroem VALUES('navn1', '2010-01-01'); INSERT INTO loevstroem VALUES('navn2', '2010-01-10'); INSERT INTO loevstroem VALUES('navn3', '2010-01-20');
erikjacobsen, forklar naermere om din udtalelse at "det er heller ikke nok at bruge ugenummeret i det eksempel som Christian kommer med - der skal ogsaa bruges aarstal?" Ifoelge teorien og mine tests giver WEEK('2009-02-03') korrekt ugenummer for 2009, WEEK('2010-02-03') korrekt ugenummer for 2010, o.s.v.
Eller taler du om noget andet?
(Yderligere var spoergsmaalet oprettet i kategorien MySQL og drejer sig om hvordan man med et SELECT statement traekker raekker ud for et bestemt ugenummer, og det rettede jeg mig efter i mit svar.)
Man vil aldrig kun bede om ugenummer "10" fx. Det vil altid være uge nummer "10" i et bestemt år - med mindre selvfølgelig tabellen kun indeholder data fra en periode på mindre end et år.
erikjacobsen, ja, selvfoelgelig. Nu faldt tioeren. Hvordan kunne jeg tvivle?
Det maa vi give tilbage til spoergsmaals-stilleren. Loevstroem, hvis du vil have det der er posted i uge 10 saa maa vi, ifoelge erikjacobsen og (omsider) mig spoerge "uge 10 i hvilket aar?" Hvis i 2010 saa maa querien blive noget lignende som:
SELECT * FROM loevstroem WHERE YEAR(dato) = '2010' AND WEEK(dato) = 10;
Det bringer os så tilbage til problematikken omkring brugen af beregninger på felter i tabellen. Generelt vil dette forhindre brugen af indexer på disse felter, og dermed gennemtvinge et gennemløb af hele tabellen. Det er ok hvis tabellen er lille, men et no-no hvis tabellen er stor.
Man overtræder første normalform ved at benytte WEEK og YEAR funktionerne,
Derfor mit simple forslag
SELECT ... WHERE dato>='2010-04-XX' AND dato<'2010-04-YY'
hvor man een gang for alle beregne start og slutdato for en given uge.
(1) sidste indlaeg idag. Af to aarsager: (a) det er langt over normal sengetid i Belgien. (b) Hvis jeg alligevel bliver ved saa er det snart i morgen.
(2) Jeg er uenig med dig (maaske kun til du forklarer mere og jeg pludselig ser dagens lys.) Den maaede man stiller spoergsmaal paa har (ifoelge hvad jeg har laert) intet at goere med normalisering. Den tabel jeg gav i indlaeg #1 er (ifoelge min mening) 5N (den er 3N, men fordi den er saa simpel er den ogsaa BCN og 4N of 5N.)
(3) Men formaalet med denne traad er ikke at du og jeg diskuterer normalisering (skoent det er interressant) men at hjaelpe spoergsmaalsstilleren med hans oprindelige spoergsmaal. Hvis Loevstroem gerne vil soege paa indlaeg indenfor en uge og maaske benytte en parameter dertil, skoent mit svar #1 var utilstraekkelig mener jeg stadig at mit svar #6 er korrekt.
God Soendag. Jeg skulle have vaeret i seng for lenge side. Mem....
Engang, i et meget tidligere aarhundrede, jeg tror omkring 1978, fandt jeg, paa biblioteket, en bog skrevet af en der hed Codd. (Paa hollandsk (det sprog jeg snakker med min hollandske kone) betyder det torsk.) Jeg fandt bogen saerdeles interssant. Codd sagde udtrykkelig at hans bog ikke beskaeftigede sig med computer systemer der kunne udfoere hans teorier. (Saadanne computer systemer fandtes heller ikke foer Oracke og IBM omkring 1982 begyndte at udvikle dem for Relational Database Management Systems.)
Jeg tror jeg blev forelsket i Codds teorier, og det er jeg stadigvaek. Det er rendyrket logik!
Men det er nu laenge siden jeg har dykket dybt i teorien. Fra det jeg husker tager du fejl. Normalisering har intet som helst at goere med de forespoergsler man laver paa en tabel, kun med strukturen af de data der sidder i tabellen.
Har du forstaaet normalisering paa en anden maade saa forklar.
(Og det har intet at goere med det oprindelige spoergsmaal. loevstroem, en reaktion pse.
Umiddelbart synes jeg ikke det virker helt efter hensigten. Jeg får returneret antallet af poster i denne uge. Dog bliver de nye oprettet i dag, søndag ikke talt med - er der evt. en metode til at tjekke hvornår date starter ugen eller konfigurere den?
Jeg synes ikke umiddelbart det virker efter hensigten. Dagens poster i dag, søndag bliver ikke talt med. Er der en metode til at konfigurere ugens start til mandag?
Jeg er iøvrigt enig med Christian - omskrivning til dato interval er en optimering for at udnytte index - det har ikke noget med data normalisering at gøre.
I skal alle 3 have mange tak for jeres kompetente svar :- )
Synes godt om
Ny brugerNybegynder
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.