webForumDet fria alternativet

Hämta alla datum

5 svar · 255 visningar · startad av Rocket

RocketMedlem sedan feb. 2000372 inlägg
#1

Hej.

Jag har en databas (mySQL) som jag vill visa lite statistik ur. Bland annat så vill jag visa antalet poster varje dag. Det är inget problem så länge varje dag har minst en post men om det inte finns några poster så faller det datumet bort. Går det att skriva en SQL-fråga så att alla datum kommer med även om det inte finns några poster?

Nu använder jag:

SELECT
    COUNT(photoAlbumComments.id) AS count,
    MONTH(photoAlbumComments.created) AS month,
    YEAR(photoAlbumComments.created) AS year
FROM photoAlbumComments
GROUP BY day, month, year
ORDER BY year DESC, month DESC, day DESC

red: fel i koden

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Alla datum? Sen när då? Idag, årets början, databasens födelse?

RocketMedlem sedan feb. 2000372 inlägg
#3

Just nu finns det inte så många poster så det går att ha alla datum från den äldsta posten fram tills idag. Senare så kommer det att bli så att de x senaste dagarna ska visas.

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Det är enklast att hantera x dagar tillbaka i tiden.
Skapa en tabell (t) med en kolumn (c) av typen smallint. Lagra värdena 0 tom x-1 i tabellen

select adddate(current_date,-c) 
,count(photoAlbumComments.id) AS count
from t left join photoAlbumComments
on created = adddate(current_date,-c) 
group by adddate(current_date,-c) 
order by adddate(current_date,-c) desc
RocketMedlem sedan feb. 2000372 inlägg
#5

Ok, jag ska testa.

RocketMedlem sedan feb. 2000372 inlägg
#6

Jag ändrade koden så att den räknar poster per månad istället.

SELECT
	MONTH(SUBDATE(current_date, INTERVAL i MONTH)) AS month,
	YEAR(SUBDATE(current_date, INTERVAL i MONTH)) AS year,
	COUNT(photoAlbumComments.id) AS count
FROM photoAlbumHelperMonths
LEFT JOIN photoAlbumComments
	ON DATE_FORMAT(created, '%Y%m') = DATE_FORMAT(SUBDATE(current_date, INTERVAL i MONTH), '%Y%m')
GROUP BY SUBDATE(current_date, INTERVAL i MONTH)
ORDER BY SUBDATE(current_date, INTERVAL i MONTH) desc

Jag får resultatet som jag vill ha men det känns ändå inte helt bra att begränsningen i hur långt tillbaka man kan gå ligger i hur många poster det finns i tabellen photoAlbumHelperMonths (t i LarsGs kod).

Koden fungerar i alla fall så tack för hjälpen.

128 ms totalt · 3 externa anrop · v20260731065814-full.beb2e261
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)