0

データを取得するためのphpクエリに問題があります。私が欲しいものを説明させてください。1日の数時間アクティブユーザーを保存するデータベースがあります。たとえば、01-01-2012 13:00 active = 5 01-01-2012 14:00 active = 10.私のphpクエリは、日付とアクティブの2つの列を含む配列を作成する必要があります。ただし、日付は2012年1月1日のようにする必要があります。そのため、それらをdate2としてグループ化しましたが、各日のアクティブ(合計)が見つかりませんでした。これが正しいアクティブな合計を与えない私のクエリです。

$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);
4

1 に答える 1

0

SUM(active)エイリアスとをする必要がありGROUP BY dateます。の場合dateは、datetimeできますGROUP BY DATE(date)。また、予約語には注意し、必要に応じて目盛りを使用してください。

さらに、包括的日付範囲を探している場合は、を送信するときに2012-10-03、それが実際にであり、と2012-10-03 00:00:00の間のすべてのレコードが無視されることを知っておく必要があります。00:00:0023:59:59

最後に、mysql_関数は非推奨になっているため、使用を停止する必要があります。

このクエリは機能するはずです:

$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)は次のようになります。

配列
((
    [0]=>配列
        ((
            [date2] => 2012-10-03
            [アクティブ]=>5
        )。

)。
于 2012-10-04T14:17:02.667 に答える