2016-05-01 26 views
0

私は、さまざまな顧客の注文を保持するデータベースで次のクエリを実行しています。配列にゼロ値を追加する

[[0,1]、[1,4] ...]

SELECT WEEKDAY(orderDateTime) Date, COUNT(clientID) totalCount FROM orders WHERE YEARWEEK(orderDateTime,1) = YEARWEEK(NOW(),1) GROUP BY DATE(orderDateTime) 

SELECT WEEKDAY(orderDateTime) Date, COUNT(clientID) totalCount FROM orders WHERE YEARWEEK(orderDateTime,1) = YEARWEEK(NOW() - INTERVAL 1 WEEK,1) GROUP BY DATE(orderDateTime) 

SELECT DATE_FORMAT(orderDateTime, '%Y') as 'year', DATE_FORMAT(orderDateTime, '%m') as 'month', COUNT(clientID) as 'total' FROM orders GROUP BY DATE_FORMAT(orderDateTime, '%Y%m') 

は、私は彼らがカウント値に対する月/日番号の配列にこれらを構築しています私はこれらをグラフ化するためにFlotを使用していますが、何が起こっているのかは、何もない注文がないということです(明らかに)。

[[0、1]、[ 1,4]、[6,12]]となり、グラフのプロットが間違ってしまいます。

うまくしようとして何がそれが見えるように、どのようにパッドであるように:

[[0,1]、[1,4]、[2,0]、[3,0]、[4 0]、[5,0]、[6,12]] < - 平日の場合、

[[1,1]、[2,4]、[3,0]、[4 、[0,0]、[5,0]、[6,0]、[7,12]、[8,0]、[9,12]、[10,0]、[11,0]、[12,0 ]] < - 毎月。

私はPHPをメインとしています。私はそれがはっきりしていない場合は、任意のポインタが高く評価され、ごめんなさい。明確化が必要かどうか尋ねる。

PHP:毎週データの

$thisWeekA = array(); 

$thisWeekQ = $database->query("SELECT WEEKDAY(orderDateTime) Date, COUNT(clientID) totalCount FROM orders WHERE YEARWEEK(orderDateTime,1) = YEARWEEK(NOW(),1) GROUP BY DATE(orderDateTime)")->fetchAll(); 

foreach($thisWeekQ as $thisweek){ 
    $thisWeekA[] = array($thisweek['Date'], $thisweek['totalCount']); 
} 

array(2) { 
    [0]=> 
    array(4) { 
    ["Date"]=> 
    string(1) "2" 
    [0]=> 
    string(1) "2" 
    ["totalCount"]=> 
    string(1) "3" 
    [1]=> 
    string(1) "3" 
    } 
    [1]=> 
    array(4) { 
    ["Date"]=> 
    string(1) "3" 
    [0]=> 
    string(1) "3" 
    ["totalCount"]=> 
    string(1) "2" 
    [1]=> 
    string(1) "2" 
    } 
} 
+0

PHPの入力データを処理してグラフにする必要があります。あなたがグラフの準備データを準備するために使用したPHPコードを共有することができます –

+0

あなたの質問でこれを更新してください –

+0

更新、申し訳ありません。 – Jiggles

答えて

0

私はこれを行う方法を把握するために管理するために、あなたの配列を移入することができます。 Forループの方向に私を指摘してくれてありがとう!

これは私が思いついたものです。

function arrayhunt($products, $field, $value){ 

    foreach($products as $key => $product){ 

     if ($product[$field] == $value){ 
      return $key; 
     } 
    } 
    return false; 
} 


    $i = 0; 
    for ($i = 0; $i <= 6; $i++) { 

     $keys = arrayhunt($thisWeekQ,"Date",$i); 

     if($keys !== FALSE){ 
      $thisWeekA[] = array($thisWeekQ[$keys]['Date'], $thisWeekQ[$keys]['totalCount']); 
     } else { 
      $thisWeekA[] = array($i, 0); 
     } 

     $keys = ""; 
    } 

うまくいけば、誰かがこれを後で使うと便利だと思いますように。

1

は、我々がforループを使用することができる代わりに、結果データからのforeachを使用しての一週間で ロジックのみ7日、としてそれを更新してPHPのループのために使用しますあなたはより多くのこのようなあなたのアレイを構築について考えてよいでしょう七日

すなわち、同様にまた

$thisWeekA = array();  
$thisWeekQ = $database->query("SELECT WEEKDAY(orderDateTime) Date, COUNT(clientID) totalCount FROM orders WHERE YEARWEEK(orderDateTime,1) = YEARWEEK(NOW(),1) GROUP BY DATE(orderDateTime)")->fetchAll(); 

    for ($i = 0; $i <= 6; $i++) { 
     if ($thisWeekQ[$i]['Date'] == $i) { 
      $thisWeekA[$i][] = array($thisWeekQ[$i]['Date'], $thisWeekQ[$i]['totalCount']); 
     } else { 
      $thisWeekA[$i][] = array($i, 0); 
     } 
    } 
+0

私は、クエリの出力がどのようなものかを追加しました。 – Jiggles

+0

申し訳ありませんが、私のコメントは明らかではありませんでした!配列番号を見ているので、それは注文数と決して一致しないことを意味するので、フィドルがあった。私のすべての数字は0として出てきます。 – Jiggles

1

年間の使用:

var dow = []; 
dow[0] = 1; 
dow[1] = 4; 
dow[6] = 12; 

は、この時点で、あなたのチャート

var chartData = []; 
for (var i=0; i<7; i++){ 
    chartData[i] = [i, (dow[i] === undefined ? 0 : dow[i])]; 
} 
関連する問題