2012-10-04 79 views
0

我有我的PHP查询得到的数据的问题。让我解释我想要的。我有一个数据库,可以在一天中将活动用户保存几个小时。例如2012年1月1日13时 活性= 5 2012年1月1日14点00活性= 10。我的PHP查询应使其中包含2列其是日期和有源阵列。但日期必须像01-01-2012小时。所以我将它们分组为date2,但我无法找到每天的活动(总和)。这是我的查询,它没有给出正确的活跃总和。PHP查询返回的缺失数据

$query2 = mysql_query("SELECT DATE_FORMAT(date, '%Y-%m-%d') AS date2, SUM(active) FROM hit WHERE game= '".$game."' AND source = '".$source."' AND date > '".$dateFrom."' AND date < '".$dateTo."' GROUP BY date2 ORDER BY date2"); 

while($tuple= mysql_fetch_array($query2)){ 
    $myArr[] = $tuple; 
} 
print_r($myArr); 
+0

请你能对您的问题展开以饱满的工作示例代码。目前的问题不表示什么类型的对象'$ dateFrom'是和其他变量的值是什么,以及有没有在有关SQL列类型 – andyb

+0

信息,由于您使用废弃的'mysql_query'接口,必须逃避所有的你的值使用'mysql_real_escape_string'或者你有**严重的** [SQL注入漏洞](http://bobb-tables.com/php)。使用'mysqli'或PDO确保您的应用程序安全性更容易。在太迟之前,您应该切换到其中一个界面。 – tadman

回答

0

您需要别名SUM(active)GROUP BY date。如果datedatetime,可以GROUP BY DATE(date)。此外,请注意reserved words,并确保在必要时使用刻度标记。

此外,如果你正在寻找一个具有包容性的日期范围,你应该知道,当你发送2012-10-03,它实际上是2012-10-03 00:00:0000:00:0023:59:59之间的任何记录都将被忽略。

最后,应停止使用mysql_功能,因为他们正在deprecated

query应该工作:

$query2 = mysql_query(" 
    SELECT DATE_FORMAT(`date`, '%Y-%m-%d') AS date2, SUM(active) AS active 
    FROM hit 
    WHERE game= '".$game."' AND source = '".$source."' 
     AND `date` > DATE_SUB('".$dateFrom."', INTERVAL 1 SECOND) 
     AND `date` < DATE_ADD('".$dateTo."', INTERVAL 1 DAY) 
    GROUP BY DATE(`date`) 
    ORDER BY `date`"); 
$i = 0; 
while($tuple= mysql_fetch_array($query2)){ 
    $myArr[$i][date2] = $tuple[date2]; 
    $myArr[$i][active] = $tuple[active]; 
    $i++; 
} 
print_r($myArr); 

你的阵列($myArr)然后看起来像:

Array 
(
    [0] => Array 
     (
      [date2] => 2012-10-03 
      [active] => 5 
     ) 

)
+0

它没有工作。它会在01-01-2012和01-01-2012再次提供。它应该将它们组合为01-01-2012一次,并且应该在该阵列中添加活动数据的总和。我的意思是它应该给日益活跃用户(和)日 –

+0

@AnılCanlı我只是做了更新。另外,'$ dateFrom'和'$ dateTo'的日期格式是什么? – Kermit

+0

日期的格式是(Y-m-d)那里没有小时。 –