webForumDet fria alternativet
Logga in / Bli medlem

Hämta alla datum

Databaser & SQL

5 svar · 255 visningar · startad av Rocket

Medlem sedan feb. 2000372 inlägg
Trådstart#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

Medlem sedan dec. 200012 464 inlägg
#2

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

Medlem 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.

Medlem 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
Medlem sedan feb. 2000372 inlägg
#5

Ok, jag ska testa.

Medlem 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.

264 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)