我有兴趣使用MySQLi从数据库中收集上个月的数据。
但是每个月使用INTERVAL 1个月与另一个重叠,那么有没有办法告诉该功能检查我当前的月份,从第一天开始,并收集所述月份的所有数据?
类似的东西:
SELECT count(DISTINCT ip) AS visitor_ip FROM visitor_list
WHERE visited_date > ( INTERVAL CURRENT_MONTH_BEGINNING)
答案 0 :(得分:2)
您可以使用当前年份和月份,以及01作为日期:
SELECT count(DISTINCT ip) AS visitor_ip
FROM visitor_list
WHERE visited_date > CONCAT(DATE_FORMAT(NOW(),'%Y%m'), '01')
这样做的好处是visited_date
上的任何索引仍然可以正确使用。
答案 1 :(得分:0)
首先,您需要从PHP生成当前月份的开始日期:
$monthStartDate = date('Y-m').'-01';
然后您的查询将变为:
$sql = "SELECT count(DISTINCT ip) AS visitor_ip FROM visitor_list WHERE visited_date > DATE_SUB(now(), interval (datediff(now(), '".$monthStartDate."')) day)";