我的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/
答案 0 :(得分:3)
在SQL中,这将更容易。类似的东西:
SELECT product, date, COUNT(*)
FROM tablename
GROUP BY product, date.
然后每行按日期显示一个产品,并计算该日期的销售量。