我有两张桌子:
proxies_meta
代理
proxies_meta 就像所有IP地址所在的位置,而代理获取条目或在使用来自 proxies_meta 的IP时更新。
现在,在某一天,我必须选择尚未被禁止的代理IP status = 0
而hits
每天不超过10。到目前为止,我试过这个但没有工作
select pm.ip_address as IP,sum(p.hits) as total_hits
from proxies_meta as pm
LEFT JOIN proxies as p
ON p.ip_address = pm.ip_address
AND pm.`current_status` = 0
AND date(p.updated_at) = '2017-06-23'
GROUP BY IP
having total_hits < 11 OR total_hits is NULL
只要状态为0
或proxies
中没有记录,此查询就会有效。如果current_status
和status
已从0
更改为-1
,那么由于LEFT JOIN
如何确保我没有获取不需要的IP地址,并且还会检查每天的总点击次数?
答案 0 :(得分:1)
我认为您只需将当前状态需求的条件移至where
子句:
select pm.ip_address as IP, sum(p.hits) as total_hits
from proxies_meta pm left join
proxies p
on p.ip_address = pm.ip_address and
date(p.updated_at) = '2017-06-23'
where pm.current_status = 0
group by pm.ip_address
having total_hits < 11 or total_hits is null;
left join
保留第一个表中的所有行,无论on
子句的计算结果是true,false还是NULL
。因此,第一个表上的条件不会过滤任何内容。对于实际过滤,第一个表上的条件需要在where
子句中。