RocketMedlem sedan feb. 2000372 inlägg 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 Alla datum? Sen när då? Idag, årets början, databasens födelse?
RocketMedlem sedan feb. 2000372 inlägg 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 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 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.