从mysql查询创建数组

时间:2015-04-30 04:15:10

标签: php mysql

我的MySQL数据库中有这样的东西。

 Date            product 
2015-01-01           1
2015-01-01           2
2015-02-03           3
2015-02-04           1  
2015-02-04           1
2015-02-04           3

我在PHP中需要知道哪个产品在哪天销售的频率。 所以:01.01.2015产品1一次,产品2一次,在04.02.2015产品1两次,产品3一次...

像这样:

Date                product 1  product 2 product 3 
2015-01-01           1           1       0     //how many times 
2015-02-03           0           0       1
2015-02-04           2           0       1

所以我做了一个普通的查询:按日期从表顺序中选择日期。

我在数组中将对象作为stdClass返回,但现在我仍然不知道如何获取所需的信息。

我试过像

这样的东西
$array=array();

foreach ($result as $key => $value) {
    $time = ($result[$key]->date);

    $temp[] = array(
            'date' => $time, 
            'product 1' => '2', //equals times
            'product 2' =>  '3', 
            'product 3' => '4',
            'product 4' => '4' 

    );
    $arrayBig[] = $temp;

}

并且还使用array_count_values来过滤知道哪些天出现的日子,但我无法找到如何将产品连接到日期。

编辑:DWright的解决方案:

 SELECT product, date, COUNT(*)
 FROM tablename
 GROUP BY product, date.

日期产品数量(*)     2015-01-01 1 1     2015-01-01 2 2     2015-02-03 3 1

工作得很好,现在我已经在每一行中销售哪个产品的日期频繁。

我现在遇到的问题是,如果我想使用此数据来填充谷歌堆积图表,如下所示,结果中的每一行代表谷歌图表图表中的列。因此,对于上面的例子,我将在2015年1月1日在我的图表中有两个条目(产品1的一个条和产品2的一个条)但我想要堆叠每天的产品数量。因此,2015年1月1日应该只有一个条目,当天销售的产品1的数量和当天销售的产品2的数量相互叠加,

$result = $sql statement

foreach ($result as $key => $value ) {
$typeOfProduct = $value->product;
$amount = $value->anzahl;
$time = $value->Date;
    switch ($typeOfProduct) {
                case 1: 
                    $produt1 = $amount;
                    break;
                case 2: //twitter
                    $product2 = $amount;
                    break;
                case 3:
                    $product3 = $amount;
                    break;
                default:

                    break;
            }
    $rows = array();
            $table = array();
            $table['cols'] = array(

                array('label' => 'Datum', 'type' => 'date'),
                array('label' => 'product 1', 'type' => 'number'),
                array('label' => 'product 2', 'type' => 'number'),
                array('label' => 'product 3', 'type' => 'number')

            );

    $day = date('d', strtotime( $time ) );
    $month = date('m', strtotime( $time ) );
    $monthNew  = $month - 1;
    $year = date('Y', strtotime( $time ) );


            $temp[] = array('v' => "Date( $year, $monthNew, $day )");
            $temp[] = array('v' => $product1 );
            $temp[] = array('v' => $product2);
            $temp[] = array('v' => $product3 );

            $rows[] = array('c' => $temp);
            $table['rows'] = $rows;
}

这会产生如下结果:https://jsfiddle.net/api/post/library/pure/

但我需要将值堆叠在一起,如下所示: https://jsfiddle.net/api/post/library/pure/

1 个答案:

答案 0 :(得分:3)

在SQL中,这将更容易。类似的东西:

 SELECT product, date, COUNT(*)
 FROM tablename
 GROUP BY product, date.

然后每行按日期显示一个产品,并计算该日期的销售量。