Max views van een dag in een maand

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Arian Stolwijk

Arian Stolwijk

25/10/2006 10:56:00
Quote Anchor link
Hoi

Mijn database ziet er als volgt uit
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
id       | INT
tijd     | DATETIME
views | INT


Nu wil ik het aantal views van een dag berekenen.
Dit gaat nog wel... gewoon met de SUM(views) funcite om het aantal views op een dag te berekenen.

Maar dat wil ik niet... ik wil het maximum aantal views per dag van een maand berekenen.

Bijvoorbeeld
op dag 1 zijn er 10 views
op dag 2 zijn er 15 views
op dag 3 zijn er 5 views
op dag 4 zijn er 25 views
op dag 4 zijn er 15 views

Dan moet hij dus als output 25 geven. En dit gedurende één maand (dus 31 dagen)

Hoe kan ik dit berekenen ??

Groeten,
Arian
 
PHP hulp

PHP hulp

18/11/2024 20:29:32
 
Robert Deiman

Robert Deiman

25/10/2006 10:59:00
Quote Anchor link
SELECT SUM(views) AS totaal FROM tabel WHERE totaal=MAX(totaal)

Volgens mij moet zoiets werken.
 
Barman V

Barman V

25/10/2006 11:03:00
Quote Anchor link
Dan krijg je volgens mij een foutmelding: Invalid use of group function
 
Jan Koehoorn

Jan Koehoorn

25/10/2006 11:04:00
Quote Anchor link
@ Robert: MAX in een WHERE mag niet. Ik zou het zo doen:

SELECT SUM(views) AS totaal
FROM tabel
GROUP BY DAY_OF_MONTH(tijd)
ORDER BY totaal DESC
LIMIT 1

al moet ik eerlijk zeggen dat ik niet weet of die DAY_OF_MONTH in een GROUP BY mag.
Edit:

getest, en die mag dus niet, hahaha
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
 
Barman V

Barman V

25/10/2006 11:08:00
Quote Anchor link
Je kan wel met HAVING het maximum views selecteren.
Dit werkt bijvoorbeeld wel

HAVING totaal=MAX(totaal)
 
Arian Stolwijk

Arian Stolwijk

25/10/2006 11:09:00
Quote Anchor link
@Jan
Volgens mij wil GROUP BY wat je al zei inderdaad niet
Ik krijg deze error: Er is iets fout in de gebruikte syntax bij '(tijd) ORDER BY totaal DESC LIMIT 1' in regel 6
 
Jan Koehoorn

Jan Koehoorn

25/10/2006 11:11:00
Quote Anchor link
Net weer even gekeken, en dit mag wel:

GROUP BY DAYOFMONTH(datumtijd)

ik had de functienaam dus fout. Of het ook het gewenste resultaat oplevert, is vers twee.

@ Barman: klopt. Het regeltje is dus eigenlijk zo: als je een aggregate functie in een WHERE wilt hebben, moet je HAVING gebruiken.
 
Arian Stolwijk

Arian Stolwijk

25/10/2006 11:12:00
Quote Anchor link
@Barman:
Met deze sql: SELECT SUM(views) AS totaal FROM stats HAVING totaal=MAX(totaal)
Krijg ik deze error: Onbekende kolom 'totaal' in having clause
Dus dat wil ook niet...
 
Bart van der veen

bart van der veen

25/10/2006 11:22:00
Quote Anchor link
@arjan
wel ff bij de les blijven en lezen wat er fout gaat: Onbekende kolom, dan moet er bij jou toch ergens een lampje gaan rinkelen. Laat ik eens een andere kolom invullen en kijken wat er dan gebeurt. nu ben ik zelf niet sql wizzerd, maar ik geloof dat jan zijn oplossing de beste is in dit geval, en dan zelf de kolommen even aanpassen!
 
Robert Deiman

Robert Deiman

25/10/2006 11:32:00
Quote Anchor link
Jan Koehoorn schreef op 25.10.2006 11:11:
Net weer even gekeken, en dit mag wel:

GROUP BY DAYOFMONTH(datumtijd)

ik had de functienaam dus fout. Of het ook het gewenste resultaat oplevert, is vers twee.

@ Barman: klopt. Het regeltje is dus eigenlijk zo: als je een aggregate functie in een WHERE wilt hebben, moet je HAVING gebruiken.


Even een vraagje/ opmerking tussendoor..
Als je groepeerd op DAYOFMONTH(datumtijd) krijg je dan niet oook dag 1 van maand 1 en dag 1 van maand 2 bij elkaar?
 
Arian Stolwijk

Arian Stolwijk

25/10/2006 11:35:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$max_sql
= "
    SELECT
        SUM(views) AS totaal
    FROM
        stats
    GROUP BY
        DAYOFMONTH(tijd)
    ORDER BY
        totaal DESC
    LIMIT 1
"
;
$max_res = mysql_query($max_sql) or die(mysql_error());
$max = mysql_fetch_assoc($max_res);
echo $max['totaal'];

?>


Met deze code zegt hij: 56112
Dit lijkt mij vrij sterk, omdat het maar 56 is...
 
Robert Deiman

Robert Deiman

25/10/2006 11:38:00
Quote Anchor link
Enig idee waar die 112 vandaan komt? (ligt het ook aan mij of is het wel heel toevallig het dubbele aantal van 56)
 
Klaasjan Boven

Klaasjan Boven

25/10/2006 11:39:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
SELECT
   SUM(views) AS totaal,
   MAX(SUM(views)) as hoogste
FROM
  stats
GROUP BY
  totaal,
  hoogste,
   DAYOFMONTH(tijd)
HAVING
  totaal=hoogste


En zo?
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
 
Arian Stolwijk

Arian Stolwijk

25/10/2006 11:40:00
Quote Anchor link
Ik heb nog even een paar keer auto laten refreshen (Opera :D) zodat hij nu 128 views heeft. Nu geeft hij 128184 weer...
 
Klaasjan Boven

Klaasjan Boven

25/10/2006 11:41:00
Quote Anchor link
is 128 en 128+56
 
Jan Koehoorn

Jan Koehoorn

25/10/2006 11:42:00
Quote Anchor link
@ Klaasjan: er mist een komma aan het einde van regel 2 van je voorbeeld.
 
Arian Stolwijk

Arian Stolwijk

25/10/2006 11:43:00
Quote Anchor link
@ Klaasjan: Nee, helaas... hij zegt nu dit: Er is iets fout in de gebruikte syntax bij 'MAX(SUM(views)) AS hoogste FROM stats GROUP BY totaal,' in regel 3


Met komma zegt hij dit: Ongeldig gebruik van GROUP-functie
Gewijzigd op 01/01/1970 01:00:00 door Arian Stolwijk
 
Klaasjan Boven

Klaasjan Boven

25/10/2006 11:51:00
Quote Anchor link
Jan Koehoorn schreef op 25.10.2006 11:42:
@ Klaasjan: er mist een komma aan het einde van regel 2 van je voorbeeld.


Aangepast
 
Jan Koehoorn

Jan Koehoorn

25/10/2006 11:52:00
Quote Anchor link
Ik heb ook nog even gesnuffeld:

SELECT MAX( views ) AS hoogste,
DATE_FORMAT( tijd, '%Y-%m' ) AS maand
FROM tabelnaam
GROUP BY maand
ORDER BY maand ASC
LIMIT 0 , 30
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
 
Klaasjan Boven

Klaasjan Boven

25/10/2006 11:56:00
Quote Anchor link
Jan Koehoorn schreef op 25.10.2006 11:52:
Ik heb ook nog even gesnuffeld:

SELECT MAX( views ) AS hoogste,
DATE_FORMAT( tijd, '%Y-%m' ) AS maand
FROM tabelnaam
GROUP BY maand
ORDER BY maand ASC
LIMIT 0 , 30


Ik mis de HAVING
 
Jan Koehoorn

Jan Koehoorn

25/10/2006 11:57:00
Quote Anchor link
@ Klaasjan: ik heb lokaal even een kleine testtabel gemaakt en daar rolden de goede waarden uit zonder dat ik HAVING nodig had, vandaar.
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.