PHP和MYSQLI在几个月内循环

PHP和MYSQLI在几个月内循环,php,json,mysqli,Php,Json,Mysqli,我试图检索每个月(01、02、03等)的数据,但我不知道如何进行循环。现在我每个月都有这个!(如果你跳过了其他几个月,那么你就不必看到所有的月份) 数据库方案: IP无符号整数-PK 基准日期不为空 告诉INT不为NULL-默认值为1 基准是指日期 说就是数 另外,将查询转换为准备好的语句是方便的还是至少是良好的做法?此代码只能在只有我和其他管理员才能访问的私人页面上使用。使用查询: SELECT count(*) AS num, EXTRACT(YEAR_MONTH FROM datum)

我试图检索每个月(01、02、03等)的数据,但我不知道如何进行循环。现在我每个月都有这个!(如果你跳过了其他几个月,那么你就不必看到所有的月份)

数据库方案:

  • IP无符号整数-PK
  • 基准日期不为空
  • 告诉INT不为NULL-默认值为1

    • 基准是指日期
    • 说就是数
  • 另外,将查询转换为准备好的语句是方便的还是至少是良好的做法?此代码只能在只有我和其他管理员才能访问的私人页面上使用。

    使用查询:

    SELECT count(*) AS num, EXTRACT(YEAR_MONTH FROM datum) as yearmonth  FROM unique_ip WHERE datum BETWEEN '2016-01-01' AND '2016-05-02' GROUP BY EXTRACT(YEAR_MONTH FROM datum) DESC";
    

    此SQL将为您提供月份计数。

    我真的不知道您打算做什么,但请尝试以下SQL:

    $queryJanuary    = "SELECT count(datum) AS num FROM unique_ip WHERE (datum>='2016-01-01' AND datum<='2016-01-31')";
    $queryFebruari   = "SELECT count(datum) AS num FROM unique_ip WHERE (datum>='2016-02-01' AND datum<='2016-02-28')";
    
    $data            = array(); //INITIALIZE DATA TO AN EMPTY ARRAY...
    try{
        $January     = $Connection->query($queryJanuary);
        $Februari    = $Connection->query($queryFebruari);
    
        $rowJanuari  = mysqli_fetch_assoc($January);
        $rowFebruari = mysqli_fetch_assoc($Februari);
    
        $january     = $rowJanuari['num'];
        $februari    = $rowFebruari['num'];
        $data        = array($january, $februari);
    }catch(Exception $e){
        //HANDLE YOUR EXCEPTION HERE...
        die();
    }
    
    echo json_encode($data);
    

    $queryjanur=“选择count(datum)作为num FROM unique_-ip,其中(datum>='2016-01-01'和datum='2016-02-01'和datum='2016-02-01'以及datum='2016-01-01'和datum尝试以下查询。这将帮助您在单个查询中进行所有月份的计数

    $queryallmonth = "SELECT MONTHNAME(datum) Month,COUNT(ip) num FROM unique_ip GROUP BY DATE_FORMAT(datum, '%Y%m')"
    

    出示你的桌子structure@SunilPachlangia我添加了itI。我正在尝试检索我的网站每月的访问量。数据库中充满了带有访问日期的唯一ip地址。我正在尝试计算每个月唯一ip的总数,并将其添加到阵列中。经过一些测试和试用,我更喜欢您的方法!在我看来,它更易于使用,也更易于阅读。谢谢,您还知道将输出放入数组的最佳方法吗?循环遍历结果,将yearmon作为数组的索引,并将计数指定为数组的值
    $queryAll       = "SELECT COUNT(datum) AS countJan,
                       (SELECT COUNT(datum) FROM unique_ip WHERE (datum>='2016-02-01' AND datum<='2016-02-28')) AS countFeb  
                       FROM unique_ip AS af WHERE (datum>='2016-01-01' AND datum<='2016-01-31')";
    $data            = array(); //INITIALIZE $data TO AN EMPTY ARRAY...
    $rowAll          = array(); //INITIALIZE $rowAll TO AN EMPTY ARRAY...
    
    try{
        $query       = $Connection->query($queryAll);
        $rowAll      = mysqli_fetch_assoc($query);
        $january     = $rowAll['countJan'];
        $februari    = $rowAll['countFeb'];
        $data        = array($january, $februari);
        // BUT YOU DON NOT NEED TO PUSH $january & $februari INTO THE $data ARRAY 
        // BECAUSE YOU HAVE THOSE VALUES ALREADY INSIDE THE $rowAll VARIABLE 
        // WHICH SHOULD CONTAIN THESE KEYS: "countJan" & "countFeb"
    }catch(Exception $e){
        //HANDLE YOUR EXCEPTION HERE...
        die();
    }
    
    //DUMP THE VALUES TO SEE IF THEY ARE WHAT YOU EXPECTED 
    var_dump($data);
    var_dump(rowAll);
    
    $queryallmonth = "SELECT MONTHNAME(datum) Month,COUNT(ip) num FROM unique_ip GROUP BY DATE_FORMAT(datum, '%Y%m')"