基于日期比较的/ COUNT()和HAVING的MySQL查询

时间:2011-06-23 20:01:54

标签: php mysql sql count

我正在尝试将计数结果限制为符合特定条件的结果。我目前正在使用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子句条件时才会计算。我一直在使用HAVING和0运气如下。也许有更好的方法?

$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)";

3 个答案:

答案 0 :(得分:3)

尝试使用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

答案 1 :(得分:1)

这可能有效:

SELECT ads_cate.cateName, ads_list.recdate, COUNT(CASE WHEN to_days(now())<=to_days((recdate)+14) THEN ads_list.Title ELSE NULL END) AS Title
FROM
ads_cate
JOIN ads_list ON ads_cate.id = ads_list.category 
GROUP BY ads_cate.cateName

答案 2 :(得分:0)

将过滤后的计数放入子查询中,然后将LEFT JOIN从类别表放到子查询中。