/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
SQL spørgsmål
Fra : Simon Hiort-Lorenzen


Dato : 06-04-03 14:13

Hej,

Jeg er ved at lave en download statistik på min side. I den forbindelse
laver jeg den her forespørgsel for at få antal downloads pr time d.
20-03-03:

SELECT HOUR (time) as hour , count( * ) as number
FROM dlstat
WHERE file = 'TinCamB2.exe'
AND DAYOFMONTH( time ) = 20
AND MONTH (time) = 3
AND YEAR( time ) = 2003
GROUP BY hour
ORDER BY hour DESC

Jeg får:

hour number
23 1
22 2
21 2
19 1
17 1
osv.

Mit spørgsmål er om det kan lade sig gøre at de timer med hvor der er 0
downloads, altså:

hour number
23 1
22 2
21 2
20 0
19 1
18 0
17 1
osv.

Hvordan vil man gøre det?

Mvh.
Simon



 
 
Simon Hiort-Lorenzen (06-04-2003)
Kommentar
Fra : Simon Hiort-Lorenzen


Dato : 06-04-03 14:16

"Simon Hiort-Lorenzen" <none@nowhere.invalid> wrote in message
news:b6p94d$1tug$1@news.cybercity.dk...
> Hvordan vil man gøre det?

Jeg bruger php og MySQL 3.23.54



Kristian Damm Jensen (06-04-2003)
Kommentar
Fra : Kristian Damm Jensen


Dato : 06-04-03 22:01

Simon Hiort-Lorenzen wrote:
> Hej,
>
> Jeg er ved at lave en download statistik på min side. I den forbindelse
> laver jeg den her forespørgsel for at få antal downloads pr time d.
> 20-03-03:
>
> SELECT HOUR (time) as hour , count( * ) as number
> FROM dlstat
> WHERE file = 'TinCamB2.exe'
> AND DAYOFMONTH( time ) = 20
> AND MONTH (time) = 3
> AND YEAR( time ) = 2003
> GROUP BY hour
> ORDER BY hour DESC
>
> Jeg får:
>
> hour number
> 23 1
> 22 2
> 21 2
> 19 1
> 17 1
> osv.
>
> Mit spørgsmål er om det kan lade sig gøre at de timer med hvor der er 0
> downloads, altså:
>
> hour number
> 23 1
> 22 2
> 21 2
> 20 0
> 19 1
> 18 0
> 17 1
> osv.
>
> Hvordan vil man gøre det?

Du kan ikke hente noget ud, som ikke er der Da de timer, hvor der er
0 downloads af gode grunde ikke er i din tabel, må du hente dem et andet
sted fra.

Hvis du insisterer på at gøre det fra databasen (jeg kan ikke vurdere om
det et der smarteste for dig), så kan du gøre det ved at oprette en
tabel, der indeholder alle timer.

Altså

create table hours(
h int not nul);

insert into timer (0);
insert into timer (1);
....
insert into timer (23);

Join derefter denne tabel på din oprindelige forespørgsel (med lidt
modifikation):

SELECT h as hour , count( dlstat.time ) as number
FROM hours
left outer join dlstat
on h = hour(dlstat.time)
and file = 'TinCamB2.exe'
AND DAYOFMONTH( time ) = 20
AND MONTH (time) = 3
AND YEAR( time ) = 2003
GROUP BY h
ORDER BY h DESC

Bemærk:
- det er vigtigt at tælle på dlstat.time frem for *, da vi skal have
smidt NULL-værdierne væk.
- det er vigtigt at lægge alle betingelser ind under on-clausulen, da vi
ellers ødelægger hele pointen med et outer-join.
- jeg har ingen anelse om det her vil køre på dit system. Men det er
korrekt efter SQL-92 standarden.

--
--
Kristian Damm Jensen | Feed the hungry at www.thehungersite.com
kristian-damm.jensen@cgey.com | Two wrongs doesn't make a right,
ICQ# 146728724 | but three lefts do.


Simon Hiort-Lorenzen (07-04-2003)
Kommentar
Fra : Simon Hiort-Lorenzen


Dato : 07-04-03 18:11


"Kristian Damm Jensen" <REkristian-damm.jensenMOVE@cgey.com> wrote in
message news:b6r7hh$7s23a$1@ID-146708.news.dfncis.de...
> Du kan ikke hente noget ud, som ikke er der Da de timer, hvor der er
> 0 downloads af gode grunde ikke er i din tabel, må du hente dem et andet
> sted fra.

Det er klart.

> Hvis du insisterer på at gøre det fra databasen (jeg kan ikke vurdere om
> det et der smarteste for dig), så kan du gøre det ved at oprette en
> tabel, der indeholder alle timer.


Den løsning havde jeg også tænkt på, men den kan jeg ikke rigtig lide. Jeg
skal have lavet samme trick ved dage i måneden og måneder i året. Så havde
jeg overvejet om man måske kunne lave en function eller et eller andet hvor
man kunne lave noget i stil med en for løkke. Så meget kender jeg bare ikke
til MySQL.

Simon



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste