0

jsonネストされたようなnvd3 StackedAreaChart使用法を作成しようとしています:

    [
        {
            "key" : "North America" ,
            "values" : [ [ 1025409600000 , 23.041422681023] , [ 1028088000000 , 19.854291255832] ]

        },

        {
            "key" : "Africa" ,
            "values" : [ [ 1025409600000 , 7.9356392949025] , [ 1028088000000 , 7.4514668527298] ]

        },

    ]

ソース: http://plnkr.co/edit/CIGW0o?p=preview

データベースのデータを使用したい。

どうすればそのようなことを達成できjsonますか? 私はネストされたjsonものにあまり慣れていませんが、それらの構造で気付いた 1 つのことjsonは、オブジェクトの値がvalues単純な整数であるということです。のように引用されていません"1025409600000"。そして、引用しようとすると、チャートはデータを正しく読み取ることができません。

質問

  1. ネストされたjsonようなnvd3使用を生成する方法は? 私はいくつかの研究に来ましたが、何も起こりません。私はそれがうまくいくと思うようなものを見つけましたが、それを機能させることはできません。こちらもこちら

  2. unquoteネストされたjson構造から値を取得することは可能ですか? もしそうなら、どのように?

ここに私が現在取り組んでいるものがあります:

        <?php

        require_once('conn.php');

        $sql = "SELECT ua.user_id,(UNIX_TIMESTAMP(dt.transac_date)*1000) AS transac_date,
                        CONCAT(ui.fname,' ',ui.lname) AS fullname,
                        SUM((dt.item_price - dt.item_srp) * dt.sold) as profit,
                        SUM((dt.item_price) * dt.sold) as total_sales
                FROM dsp_transactions dt
                INNER JOIN user_acct ua ON dt.user_id=ua.user_id
                INNER JOIN user_info ui ON ua.ui_id=ui.ui_id
                GROUP BY ua.user_id";
        $qry = $con->query($sql);

        $data = array();
        if($qry->num_rows > 0) {
            while($row = $qry->fetch_object()) {
                $data[] = array(

                    'key' => $row->fullname,
                    'values' => $row->user_id

                    );
            }
        } else {
            $data[] = null;
        }

        $con->close();

        echo json_encode($data);

        ?>

これは私にこの価値を与えます:

[{"key":"Juan Dela Cruz","values":["1461772800000","5665.00"]},{"key":"Maria Gonzales","values":["1461772800000","275.00"]},{"key":"Apolinario Mabini","values":["1461772800000","100.00"]}]

前もって感謝します :)

編集

詳細については、次のようなことが起こることを望んでいます。

         dsp      |    sales     |   profit    |     date    
    --------------+--------------+-------------+--------------
        Juan      |    500       |     100     |    04/24/2016
    --------------+--------------+-------------+--------------
        Maria     |    600       |     200     |    04/24/2016
    --------------+--------------+-------------+--------------
       Apolinario |    700       |     300     |    04/24/2016
    --------------+--------------+-------------+--------------
        Juan      |    550       |     150     |    04/25/2016

jsonこのような形式で返されます

    [
        {
            "key" : "Juan",
            "values" : [ ["04/24/2016", "500"], ["04/25/2016", "550"] ]  // "values" loop twice because "juan" has two sales

        },
        {
            "key" : "Maria",
            "values" : [ ["04/24/2016", "600"] ]

        },
        {
            "key" : "Apolinario",
            "values" : [ ["04/24/2016", "700"] ]

        }
    ]
4

2 に答える 2

1

問題は、クエリによって返されたデータをどのように処理したかから始まると思います。私が問題を理解しているように、あなたはすべての取引日と一人当たりの売上 (または利益) をグループ化したいと考えています。したがって、配列をエンコードする前に配列を操作する必要があります。

このスニペットが実行されるかどうかを確認し、エラーが発生するかどうか教えてください。基本的に、これは問題を解決するロジックです。

<?php

require_once('conn.php');

$sql = "SELECT ua.user_id,(UNIX_TIMESTAMP(dt.transac_date)*1000) AS transac_date,
                CONCAT(ui.fname,' ',ui.lname) AS fullname,
                SUM((dt.item_price - dt.item_srp) * dt.sold) as profit,
                SUM((dt.item_price) * dt.sold) as total_sales
        FROM dsp_transactions dt
        INNER JOIN user_acct ua ON dt.user_id=ua.user_id
        INNER JOIN user_info ui ON ua.ui_id=ui.ui_id
        GROUP BY transac_date, ua.user_id";
$qry = $con->query($sql);

$data = array();
$individual_row = array();
if($qry->num_rows > 0) 
{
    while($row = pg_fetch_object($qry)) {
        //we find if there is an existing row with the person
        $indexOfIndividualRow = array_search($row->dsp, array_column($data, 'key'));
        //if no rows of the person are added yet
        if(empty($indexOfIndividualRow)&& !is_numeric($indexOfIndividualRow))
        {
            $individual_row['key'] = $row->dsp;
            $individual_row['values'] = array(array($row->date, $row->sales));
            array_push($data, $individual_row);
        }
        //if there is a row with person as key
        else 
        {
            //if there is a 'values' key
            if(isset($data[$indexOfIndividualRow]['values'])){
                array_push($data[$indexOfIndividualRow]['values'], array($row->date, $row->sales));
            }
            //else if there is no 'values' key
            else $data[$indexOfIndividualRow]['values'] = array($row->date, $row->sales);
        }
    }
}
else {
    $data[] = null;
}

$con->close();

echo json_encode($data);
?>
于 2016-04-29T04:06:48.683 に答える