2013-10-09 23 views
1

我使用cookie来跟踪网站流量,然后将其写入数据库。每日页面比例MySQL查询

我想获取我的着陆页index.php和所有其他页面在图表中显示的平均值。

我正在努力与MySQL查询的语法。

我想查询2个值:$ row-> day和$ pageRatio,并显示过去30天的这些值。

我的数据库包含一个表称为tracking具有以下字段:ID,CID,referrerDomain,引荐,网页,IP,reverseIP,的userAgent,郎,日

页字段包含网页名称,例如: 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"; 

      } 

     } 

我找到的解决方案是一个公认的答案在这里:How do I combine these 3 queries into one MySQL query?

SELECT DATE(`date`), 
     COUNT(`page`) AS indexCount, 
     SUM(`page` = 'index.php') as idx_count, 
     SUM(`page` <> 'index.php') as not_idx_count 
FROM `tracking` 
WHERE `date` BETWEEN DATE_ADD(NOW(),INTERVAL -30 DAY) AND NOW() 
GROUP BY DATE(`date`) 
+1

节目需要创建表语句和示例数据甚至使用sqlfriddle这个.. –

+0

@RaymondNijland我已经编辑我的问题,包括结构。这非常简单。 – Grant

+0

让我们从你得到的(第一个)错误开始。 – geomagas

回答

1

可能这也将工作

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