我正在尝试将计数结果限制为符合特定条件的结果。我目前正在使用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)";
答案 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
从类别表放到子查询中。