MYSQL统计每个用户在过去发布的列表

MYSQL统计每个用户在过去发布的列表,mysql,join,count,Mysql,Join,Count,我有一个MYSQL查询,我很难做我想做的事情 我有一个用户表(userstbl)包含我的所有用户记录,一个列表表(listings)包含每个用户发布的所有列表。我正在尝试选择每个用户的名称和地址,并为每个用户提供在特定日期范围内列出的列表计数,但仅统计唯一类别id的广告,这很好。 问题是我只想统计已经发布的列表。我有另一个表,它与我的列表表“listings\u log”相同,包含对每个列表记录所做的每个更改的记录。如果列表的“listings\u log”中的一条记录具有“listings\u

我有一个MYSQL查询,我很难做我想做的事情

我有一个用户表(userstbl)包含我的所有用户记录,一个列表表(listings)包含每个用户发布的所有列表。我正在尝试选择每个用户的名称和地址,并为每个用户提供在特定日期范围内列出的列表计数,但仅统计唯一类别id的广告,这很好。 问题是我只想统计已经发布的列表。我有另一个表,它与我的列表表“listings\u log”相同,包含对每个列表记录所做的每个更改的记录。如果列表的“listings\u log”中的一条记录具有“listings\u log.published=1”,则列表已发布。“listings_log”表中的每条记录都有一个与“listings”表中相同的“listing_id”

这是我现在的疑问:

SELECT
  userstbl.userid,
  userstbl.fullname, 
  userstbl.fulladdress, 
  COUNT(DISTINCT(
    CASE WHEN listings.ad_type = 1 
    AND DATE(listings.date_listed) BETWEEN '2018-01-01' AND '2018-04-01'
    THEN listings.category_id
    END )
  ) AS Listings_Count_2018,
  DATE_FORMAT(userstbl.reg_date, "%d/%m/%Y") AS RegisteredDate
FROM
  users
LEFT JOIN listings ON listings.userid = userstbl.user_id
GROUP BY userstbl.userid
这将统计每个用户在正确日期之间的唯一列表记录数

但我只需要计算清单记录,其中有一个对应的清单日志记录,该清单的published设置为“1”。“listings_log”表和“listings”表都有一个公共的listing_id列,但是listings_log表可以为每个列表包含多个记录,显示每个列表的每个更改


因此,我还想加入listings\u log.listing\u id=listings.listing\u id,并且该“listing\u id”的至少一个“listings\u log”记录中有listings\u log.published=“1”。

由于您没有提供示例表和最小的可复制示例,所以很多都是猜测。我假设每个用户都需要列表记录的总数。我用子查询构建了SQL,这些子查询旨在“从内到外”读取

见:
select u.userid, u.fullname, u.fulladdress, sq.count from usertbl u join (
    select u.userid, sum(c.count) as count from usertbl u join (
        select count(*) as count, l.userid, l.listing_id from listings l join (
           select distinct listing_id from listings_log where listings_log.published = "1"
        ) ll on l.listing_id = ll.listing_id
             and l.ad_type = 1
             and date(l.date_listed) between '2018-01-01' and '2018-04-01'
        group by l.userid, l.listing_id
     ) c on u.userid = c.userid
    group by u.userid
) sq on u.userid = sq.userid
;