Avatar billede morgan_freeman Nybegynder
27. april 2009 - 13:10 Der er 6 kommentarer

PHP - COUNT hvert årstal fra DATE og loop

Jeg har en kolonne med datoer (Date - som YYYY-MM-DD) fra de seneste godt 30 år. Jeg vil gerne have en visning af antallet af poster fra hvert år. Udskrift skal se ca. således ud:

|årstal|antal poster|
1989: 25
1990: 116
1991: 65
etc.

Hvis jeg laver denne søgning får jeg antallet af poster med 1989-dato:
SELECT COUNT(Date) AS niogfirs FROM database WHERE Date LIKE '1989%'
....men jeg vil gerne undgå at lave 30+ søgninger i det samme dokument - og samtidig sikre mig, at når der kommer nye årstal i databasen bliver de automatisk vist ved nærste søgning.

Nogen friske bud? Har fornemmelsen af at dette ikke er voldsomt svært for mange af jer eksperter, men den er ret led for mig!
Avatar billede Slettet bruger
27. april 2009 - 13:29 #1
jeg testede lige med en tabel hvor arrival er en DATE

select count(YEAR(arrival)), YEAR(arrival) from vistits group by YEAR(arrival);
Avatar billede arne_v Ekspert
27. april 2009 - 15:13 #2
count(*) maa vaere god nok:

select count(*), YEAR(arrival) from vistits group by YEAR(arrival)
Avatar billede morgan_freeman Nybegynder
27. april 2009 - 15:23 #3
Ser spændende ud - får desværre først lejlighed til at arbejde videre med det hér imorgen.

Men skal jeg forstå det sådan, at PHP og SQL selv finder ud af, at udtrække YEAR fra en DATE? Ikke noget med at skulle 'substringe' sig til at nøjes med de første 4 tegn (YYYY) i de enkelte celler?
Det ser jo top-snedigt ud.
Avatar billede Slettet bruger
27. april 2009 - 15:51 #4
mysql har mange interessante metoder til at manipulere date felter. De er alle beskrevet i mysql manualen. Det er en ret stor fordel at få SQL serveren til at smide tingene ud i det format man har brug for, så man er fri for at skulle skrive kode til at lave om på det.
Avatar billede arne_v Ekspert
27. april 2009 - 16:12 #5
Det er god stil at lade MySQL lave den gruppering paa aar.

Men generelt boer man lade sin database levere data og lade sin applikation staa for formateringen.
Avatar billede morgan_freeman Nybegynder
28. april 2009 - 11:58 #6
Fantastisk! Det er så smukt når tingene ender med at være mere simple og lette at overskue end forventet.

arne_v: Jeg håber du er med på, at daleif var først med svaret - uantastet at du har hjulpet med til at forkorte min SELECT (mange bække små).

daleif: Du må meget gerne smide et svar og modtage points.

NB. Jeg må lige kommentere:
"mysql har mange interessante metoder til at manipulere.../...(de) er alle beskrevet i mysql manualen".
Ja, det er sikkert rigtigt, men hvis jeg var istand til at orientere mig problemfrit i manualen ville jeg ikke haft brug for eksperten.dk (ligeså ofte). For mig er problemet tit, at jeg ikke ved hvordan jeg skal søge. Har googlet i timevis for at finde et eksempel på dette problem - og kigget mysql dokumentation. Men det slog mig på intet tidspunkt at man kunne lave denne fikse genvej (var ude i noget med substrings, som nævnt ovenfor, for at skære alt andet end årstal væk fra Date).
Så meget desto vigtigere er det for mig, at uddele disse point. Du kan naturligvis hverken spise dem eller omsætte dem til materiel værdi, men for mig (og alle de andre) der ikke har falkblikket, er det en fornøjelse at få hjælp af dem der har. Og de point "I" samler sammen er for "os" en tydelig markør for både evnen og villigheden til at hjælpe. Og tak for det :)
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