Avatar billede tipsen Nybegynder
10. august 2002 - 01:08 Der er 4 kommentarer og
1 løsning

En form for left join måske...?

Hej eksperter

Jeg har en db med besøgsinfo - den indeholder blandt andet tidspunkter for besøg og et udsnit ser sådan ud:

+---------------------+
| 2001-12-01 08:43:06 |
| 2001-12-01 13:59:51 |
| 2001-12-01 22:03:48 |
| 2001-12-01 23:10:34 |
| 2001-12-02 04:08:21 |
| 2001-12-02 06:02:07 |
| 2001-12-02 08:36:16 |
| 2001-12-02 11:10:11 |
| 2001-12-02 12:09:41 |
| 2001-12-02 13:13:40 |
| 2001-12-02 18:37:04 |
| 2001-12-02 18:47:38 |
| 2001-12-02 19:38:13 |
| 2001-12-02 20:40:00 |
| 2001-12-03 08:41:00 |
| 2001-12-03 09:24:28 |
| 2001-12-03 09:36:04 |
| 2001-12-03 09:38:35 |
| 2001-12-03 13:51:30 |
| 2001-12-03 16:32:04 |
+---------------------+

Jeg har følgende forespørgsel:

select DATE_FORMAT(received, '%Y-%m-%d') as date, count(*) from stats group by date order by received desc limit 20;

som giver mig dette output:

+------------+----------+
| 2002-08-09 |      11 |
| 2002-08-08 |      10 |
| 2002-08-07 |      17 |
| 2002-08-06 |      11 |
| 2002-08-05 |      21 |
| 2002-08-04 |      11 |
| 2002-08-03 |      13 |
| 2002-08-02 |        9 |
| 2002-08-01 |        5 |
| 2002-07-31 |      15 |
| 2002-07-30 |        9 |
| 2002-07-29 |      11 |
| 2002-07-28 |        7 |
| 2002-07-27 |        4 |
| 2002-07-26 |      20 |
| 2002-07-25 |        7 |
| 2002-07-22 |      30 |
| 2002-07-21 |        7 |
| 2002-07-20 |        8 |
| 2002-07-19 |        9 |
+------------+----------+

Nu er mit problem at jeg i stedet for at have antal besøgende for de sidste 20 dage *med* besøgende i stedet for gerne vil have antal besøgende for de sidste 20 dage! Dvs. hvis der ikke har været nogle besøgende, skal antallet bare være 0!

Hvordan laver jeg dette i MySQL?
Avatar billede limemedia Nybegynder
10. august 2002 - 08:19 #1
Lige siddet og stenet mysql reffen igennem - kan du overhovedet det du ønsker ? selve datoen eksisterer ikke i nogen af tabellerne hvorfor du skal ud og dynamisk generere de seneste 20 datoer til selecten.

Kan du ikke istedet i den kode der håndterer dit mysql resultat lave en art associativt array med key på datoen og værdien sat til antal hits. Dette array kan du præudfylde med de 20 datoer med værdien 0. Derved kan du loope igennem og få angivet dine 0'er

/ LJ
www.ljweb.com
Avatar billede tipsen Nybegynder
10. august 2002 - 12:57 #2
Hehe - det var *præcis* den løsning jeg også fandt frem til kl halv-tre i nat - jeg fik samme type problem med et andet udtræk, hvor jeg samtidig også skulle have en speciel sortering - det løste jeg så på denne måde og brugte det så også til det andet problem!

Men takker alligevel - det bekræfter hvertfald at løsningen ikke er "dum" :-)
Avatar billede limemedia Nybegynder
10. august 2002 - 13:06 #3
tipsen >> jeg har dig nu heller ikke mistænkt for at lave "dumme" løsninger *g* tak for point
Avatar billede tipsen Nybegynder
10. august 2002 - 13:35 #4
Alle kan lave dumme løsninger kl. sent om natten :-)
Avatar billede limemedia Nybegynder
10. august 2002 - 13:39 #5
Kommer jo an på hvornår man står op *ggg* Jeg har fx forskudt dagen med 4 timer her om sommeren, det er simpelthen for varmt til at kunne arbejde fornuftigt i dagtimerne. :D
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