I have two tables of users and articles and I want to count how many new users and how many new articles I have in the past 7 days.
tbl_users:
[Code, Username, Createdate]
1,David,01/01/2022
2,Henry,02/01/2022
tbl_articles:
[Code, Header, Createdate]
1,Hello,01/01/2022
2,Goodbye,02/01/2022
This query works now but it's slow and long. Please help me fix this query (I know it's bad) and if it's possible to add diff columns for both counters:
(Please go easy on me with the comments)
select articles.days_back,articles.count, users.count as users from (
select 0 as days_back,count(*) as count from tbl_articles where  date(createdate)< date_add(curdate(), interval -0 day)
union all 
select 1,count(*) from tbl_articles where  date(createdate)< date_add(curdate(), interval -1 day)
union all 
select 2,count(*) from tbl_articles where  date(createdate)< date_add(curdate(), interval -2 day)
union all 
select 3,count(*) from tbl_articles where  date(createdate)< date_add(curdate(), interval -3 day)
union all 
select 4,count(*) from tbl_articles where  date(createdate)< date_add(curdate(), interval -4 day)
union all 
select 5,count(*) from tbl_articles where  date(createdate)< date_add(curdate(), interval -5 day)
union all 
select 6,count(*) from tbl_articles where  date(createdate)< date_add(curdate(), interval -6 day)
union all 
select 7,count(*) from tbl_articles where  date(createdate)< date_add(curdate(), interval -7 day)
) as articles
left join 
(
select 0 as days_back,count(*) as count from tbl_users where  date(createdate)< date_add(curdate(), interval -0 day)
union all 
select 1,count(*) from tbl_users where  date(createdate)< date_add(curdate(), interval -1 day)
union all 
select 2,count(*) from tbl_users where  date(createdate)< date_add(curdate(), interval -2 day)
union all 
select 3,count(*) from tbl_users where  date(createdate)< date_add(curdate(), interval -3 day)
union all 
select 4,count(*) from tbl_users where  date(createdate)< date_add(curdate(), interval -4 day)
union all 
select 5,count(*) from tbl_users where  date(createdate)< date_add(curdate(), interval -5 day)
union all 
select 6,count(*) from tbl_users where  date(createdate)< date_add(curdate(), interval -6 day)
union all 
select 7,count(*) from tbl_users where  date(createdate)< date_add(curdate(), interval -7 day)
) as users
on articles.days_back=users.days_back