Php 如何仅使用一个MySQL请求构建JSON数据?
是否可以通过一个查询获得JSON输出Php 如何仅使用一个MySQL请求构建JSON数据?,php,mysql,json,Php,Mysql,Json,是否可以通过一个查询获得JSON输出 [{ "name": "Date", "data": ["2013-01-01", "2013-02-01", "2013-03-01", "2013-04-01", "2013-05-01"] //data from grouped from_date column }, { "name": "KD", "data": [4, 5, 6, 2, 5] // arrays from saldo_sprzedazy for KD
[{
"name": "Date",
"data": ["2013-01-01", "2013-02-01", "2013-03-01", "2013-04-01", "2013-05-01"] //data from grouped from_date column
}, {
"name": "KD",
"data": [4, 5, 6, 2, 5] // arrays from saldo_sprzedazy for KD sales_group
}, {
"name": "SG",
"data": [5, 2, 3, 6, 7] // arrays from saldo_sprzedazy for SG sales_group
}]
我当前的查询:
SELECT
sales_raport_all.from_date,
SUM(sales_raport_all.saldo_sprzedazy),
klienci_ax_all.sales_group,
klienci_ax_all.nazwa
FROM
sales_raport_all
INNER JOIN
klienci_ax_all
ON
sales_raport_all.konto=klienci_ax_all.konto_odbiorcy
WHERE
YEAR(from_date) = YEAR(CURDATE())
GROUP BY
sales_raport_all.from_date
我从日期开始分组,但我还需要按销售分组。。。
有没有可能在mysql表上使用我的?
我试着把数据准备到柱状图上
编辑:
好的,也许这会澄清我先前的问题:)这是我的PHP代码:
$query = mysql_query("SELECT
sales_raport_all.from_date,
sales_raport_all.to_date,
sales_raport_all.konto,
SUM(sales_raport_all.saldo_sprzedazy),
SUM(sales_raport_all.wartosc_kosztowa),
SUM(sales_raport_all.marza),
klienci_ax_all.sales_group,
klienci_ax_all.nazwa
FROM
sales_raport_all
INNER JOIN
klienci_ax_all
ON
sales_raport_all.konto=klienci_ax_all.konto_odbiorcy
WHERE
YEAR(from_date) = YEAR(CURDATE())
GROUP BY
sales_raport_all.from_date");
$category = array();
$category['name'] = 'Data';
while($r = mysql_fetch_array($query)) {
$category['data'][] = $r['from_date'];
}
$querySG = mysql_query("SELECT
sales_raport_all.from_date,
sales_raport_all.to_date,
sales_raport_all.konto,
SUM(sales_raport_all.saldo_sprzedazy),
SUM(sales_raport_all.wartosc_kosztowa),
SUM(sales_raport_all.marza),
klienci_ax_all.sales_group,
klienci_ax_all.nazwa
FROM
sales_raport_all
INNER JOIN
klienci_ax_all
ON
sales_raport_all.konto=klienci_ax_all.konto_odbiorcy
WHERE
klienci_ax_all.sales_group = 'SG'
AND
YEAR(from_date) = YEAR(CURDATE())
GROUP BY
sales_raport_all.from_date");
$series1 = array();
$series1['name'] = 'SG';
while($r = mysql_fetch_array($querySG)) {
$series1['data'][] = intval($r['SUM(sales_raport_all.saldo_sprzedazy)']);
}
....
我的问题是:我必须为每个特定的销售团队编写一个单独的查询,还是有更简单的方法
现在我像这样使用json:
$result = array();
array_push($result,$category);
array_push($result,$series1);
array_push($result,$series2);
array_push($result,$series3);
print json_encode($result);
如果要一次性完成此操作,您必须同时按
sales\u group
和from\u date
进行分组:
$query = mysql_query("SELECT
sales_raport_all.from_date,
sales_raport_all.to_date,
sales_raport_all.konto,
SUM(sales_raport_all.saldo_sprzedazy),
SUM(sales_raport_all.wartosc_kosztowa),
SUM(sales_raport_all.marza),
klienci_ax_all.sales_group,
klienci_ax_all.nazwa
FROM
sales_raport_all
INNER JOIN
klienci_ax_all
ON
sales_raport_all.konto=klienci_ax_all.konto_odbiorcy
WHERE
YEAR(from_date) = YEAR(CURDATE())
GROUP BY
sales_raport_all.from_date,
klienci_ax_all.sales_group
ORDER BY
sales_raport_all.from_date,
klienci_ax_all.sales_group");
然后收集所有可能的日期和原始数组中的所有数据
$raw = array();
$dates = array();
while ($r = mysql_fetch_array($query)) {
$date = $r['from_date'];
if (!in_array($date, $dates)) $dates[] = $date;
$sales_group = $r['sales_group'];
$raw[$sales_group][$date] = intval($r['SUM(sales_raport_all.saldo_sprzedazy)']);
}
最后检查原始数据,检查sales_group在给定日期是否有相关数据或将其设置为零
$data = array();
$data[0] = array('name' => "Date", 'data' => $dates);
foreach ($raw as $name => $d) {
$new_data = array('name' => $name, 'data' => array());
foreach ($dates as $date) {
$new_data['data'][] = isset($d[$date]) ? $d[$date] : 0;
}
$data[] = $new_data;
}
最终的
$data
将具有所需的结构和您需要的所有数据。可能重复为什么自己构建它。只需使用php关联数组,然后使用json_encode来完成繁重的工作。我不知道如何准备我的数据,因为我没有列名为sales_group,但我在第行有它。。。如果我使用两个或更多的循环,而。。。但超过1百万的数据速度很快?我几乎能理解。。。但当我试图打印打印json_encode($data);为空(null),如果您的任何销售组名称中包含非Unicode字符,则可能发生此情况。您必须使用htmlentities()对其进行转义,或者将编码更改为Unicode。尝试使用var_dump()转储$data以检查其中的内容。还有json_last_error()来检查编码有什么问题。我用var_dump($data)检查,结果是:数组(2){[0]=>array(2){[[name]=>string(4)“Date”[[data”]=>array(1){[0]=>NULL}[1]=>array(2){[[name]=>string(0)”[[data]=>array(1){[0]=>int(452)}},但这并没有告诉我多少:(如果你愿意的话,我也把我的sql放在这里:哦,我想我有问题了,日期不是$r['sales\u raport\u all.from\u date']
,但是$r['from\u date']
。应该是这样的。