Php 每日页面比率MySQL查询

Php 每日页面比率MySQL查询,php,mysql,Php,Mysql,我使用cookie跟踪网站流量,然后将其写入数据库 我正在尝试获取我的登录页index.php的每日比率和图表中显示的所有其他页面的平均值 我正在努力学习MySQL查询的语法 我需要查询中的两个值:$row->day和$pageRatio,并显示过去30天的这些值 我的数据库由一个名为tracking的表组成,其中包含以下字段:id、cid、referrerDomain、referrer、page、ip、reverseIP、userAgent、lang、date 页面字段包含网页名称,例如:in

我使用cookie跟踪网站流量,然后将其写入数据库

我正在尝试获取我的登录页index.php的每日比率和图表中显示的所有其他页面的平均值

我正在努力学习MySQL查询的语法

我需要查询中的两个值:$row->day和$pageRatio,并显示过去30天的这些值

我的数据库由一个名为tracking的表组成,其中包含以下字段:id、cid、referrerDomain、referrer、page、ip、reverseIP、userAgent、lang、date

页面字段包含网页名称,例如:index.php、other.php等

$sql = "SELECT (
                 SELECT COUNT(`page`) FROM `tracking`
                 WHERE `page` = 'index.php'
                 AND DISTINCT(`date`)
                 GROUP BY DATE(`date`) ) AS indexCount,

             (
             SELECT COUNT(`page`) FROM `tracking`
             WHERE `page` != 'index.php' 
             AND `date`
             BETWEEN DATE_ADD(NOW(),INTERVAL -30 DAY)
             AND NOW()
             GROUP BY DATE(`date`) ) AS otherPageCount,

                 DATE(`date`) AS day
                 FROM `tracking`
                 WHERE `date`
                 BETWEEN DATE_ADD(NOW(),INTERVAL -30 DAY)
                 AND NOW()
                 GROUP BY DATE(`date`)";

      $sqlprep = $conn->prepare($sql); 

      if($sqlprep->execute()) {
                $completedAmount = 0;
          while($row = $sqlprep->fetch(PDO::FETCH_OBJ)){

                $pageRatio = $row->indexCount / $row->otherPageCount;

                echo "['" . $row->day . "', " . $pageRatio . "],\n";

           }

         }
我找到的解决方案在这里是公认的答案:


也许这也行

SELECT DATE(`date`),
       COUNT(`page`) AS indexCount, 
       SUM(`page` = 'index.php') as idx_count, 
       SUM(`page` <> 'index.php') as not_idx_count
       TIMESTAMPDIFF(DAY,date,now()) as days
FROM `tracking` GROUP BY DATE(`date`) having days <30

也许这也行

SELECT DATE(`date`),
       COUNT(`page`) AS indexCount, 
       SUM(`page` = 'index.php') as idx_count, 
       SUM(`page` <> 'index.php') as not_idx_count
       TIMESTAMPDIFF(DAY,date,now()) as days
FROM `tracking` GROUP BY DATE(`date`) having days <30

需要显示create table语句和示例数据,甚至可能为此使用SQLFRIDLE。@RaymondNijland我已经编辑了我的问题以包含结构。这很简单,让我们从您遇到的第一个错误开始。1064-您的SQL语法有一个错误;查看与您的MySQL服务器版本对应的手册,了解使用near'DISTINCTdate GROUP BY DATEdate AS indexCount的正确语法,'在第4行,将其用于表格和示例数据使用左栏用于创建/插入单击“构建架构”并在此处复制和粘贴url…显示所需的create table语句,示例数据甚至可能为此使用SQLFRIDLE。@RaymondNijland我已编辑了我的问题以包含结构。这很简单,让我们从您遇到的第一个错误开始。1064-您的SQL语法有一个错误;查看与您的MySQL服务器版本对应的手册,了解使用“DISTINCTdate GROUP BY DATEdate AS indexCount”附近的正确语法,在第4行将其用于表和示例数据使用左栏用于创建/插入单击构建架构并复制并粘贴url到此处。。。