SELECT COUNT en GROUP BY
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
kun je dan toch oplossen door twee querys uit te voeren?
Mja, maar kwou het graag in 1, maar dat is niet mogelijk?
En een INNER/LEFT/RIGHT join geprobeert?
Code (php)
1
2
3
4
5
6
7
8
9
10
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
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 -
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)
1
2
3
4
5
6
7
8
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
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
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
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