SELECT COUNT en GROUP BY

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Leon Kunst

Leon Kunst

21/04/2009 20:25:00
Quote Anchor link
Heren,

ik zit met een query probleempje...

Ik heb een tabel met URL's, en een tabel met bezoek data.

Nu wil ik alle URL's groeperen, zodat ik er een een aantal uit krijg, maar dan houd je dus 1 resultaat over, en daarvan wil ik dan de recentste bezoekdatum van hebben.

Bijv:

/home/ 8x geklikt 21-04-2009

Ik heb alles wel al werkend, hij pakt alleen niet in dezelfde query, nog even de nieuwste datum....

Wie heeft er een voorbeeldje?

Bedankt alvast
 
PHP hulp

PHP hulp

18/12/2024 05:18:51
 
Adriaan

Adriaan

21/04/2009 20:28:00
Quote Anchor link
kun je dan toch oplossen door twee querys uit te voeren?
 
Leon Kunst

Leon Kunst

21/04/2009 20:29:00
Quote Anchor link
Mja, maar kwou het graag in 1, maar dat is niet mogelijk?
 
Michel W

Michel W

21/04/2009 21:57:00
Quote Anchor link
En een INNER/LEFT/RIGHT join geprobeert?
 
Jelmer -

Jelmer -

21/04/2009 22:23:00
Quote Anchor link
Zou zoiets niet werken?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
SELECT
    p.url,
    COUNT(v.url) as visits,
    MAX(v.visit) as last_visit
FROM
    pages as p
LEFT JOIN page_views as v ON
    v.url_id = p.id
GROUP BY
    p.url


edit: logische alias-letter gekozen
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 
Emmanuel Delay

Emmanuel Delay

22/04/2009 04:52:00
Quote Anchor link
Bij GROUP BY worden de waarden genomen van de eerste record die de db tegenkomt.

Wat je kan doen, is een select van een select uitvoeren.
De tweede select sorteer je zoals je wil, dan groepeer je pas de reccords.

Een voorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
SELECT id, naam, COUNT(naam) AS aantal_berichten, tijd, bericht
FROM (
    SELECT id, naam, bericht, tijd
    FROM gastenboek
    ORDER BY tijd DESC
    ) as t1
GROUP BY naam
ORDER BY naam


Hier heb je dus een voorbeeld waarbij je het laatste bericht ziet van elke gebruiker. De uiteindelijke lijst is dan wel gesorteerd op naam.

Raak je daaraan uit en heb je er iets aan?

EDIT: Zo-iets zou misschien werken

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT
    url, tijd, COUNT(url) AS aantal_kliks
FROM
    (
    SELECT
        url, tijd
    FROM
        pages
    LEFT JOIN page_views ON page_views.url_id = pages.id
    ORDER BY tijd DESC
    ) AS t1
GROUP BY url
ORDER BY url


Als de oplossing van Jelmer werkt, gebruik die dan. Mijn oplossing laat wel toe om iets meer complexe sortering toe te laten, bv. een willekeurige foto halen, maar wel gegroepeerd per foto album (bv. willekeurige thumbs op de pagina met foto albums).
Gewijzigd op 01/01/1970 01:00:00 door Emmanuel Delay
 



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.