我试图将我的计数结果限制在符合特定标准的范围内。我目前正在使用WHERE子句,我的输出与预期一致。
这是我当前的查询,如您所见,*ads_list*和*ads_cate*记录只有在我的WHERE recdate满足14天标记时才会被获取:

$queryCats = "
SELECT ads_cate.cateName, COUNT(ads_list.Title)
FROM
ads_cate
JOIN ads_list ON ads_cate.id = ads_list.category
WHERE to_days(now())<=(to_days(recdate)+14)
GROUP BY ads_cate.cateName";

我希望检索所有类别和广告,但仅当它们满足我的WHERE子句条件时才计算。我一直在用下面的0运气的HAVING。也许有更好的办法?
$queryCats = "
SELECT ads_cate.cateName, ads_list.recdate, COUNT(ads_list.Title)
FROM
ads_cate
JOIN ads_list ON ads_cate.id = ads_list.category
GROUP BY ads_cate.cateName
HAVING to_days(now())<=(to_days(recdate)+14)";

最佳答案

尝试使用LEFT JOIN并将日期测试作为联接条件的一部分:

SELECT ac.cateName, COUNT(al.Title)
    FROM ads_cate ac
        LEFT JOIN ads_list al
            ON ac.id = al.category
                AND to_days(now())<=(to_days(al.recdate)+14)
    GROUP BY ac.cateName

10-02 11:02