这是我在stackoverflow上的第一篇文章,但我使用过这个网站很多次,所以首先我想感谢你们与世界分享的所有伟大的答案。我使用谷歌和搜索功能之前,我张贴在这里,但我找不到一个解决我的问题的答案。
目标是创建一个google堆叠图,但他们需要一个非常特定的数组格式。在大多数情况下,我设法创建了一个图形,但对于这个图形,我无法获得mssql查询的输出。
查询得到的结果如下
Name Case Count
Company A Incident 6
Company A Request 28
Company A Problem 2
Company B Incident 1
Company B Problem 15
Company C Incident 60
Company C Problem 45
Company C Request 30
Company C Change 24
我通过以下简单的SQL查询
实现了这个结果SELECT top 20
CRM_MSCRM.dbo.FilteredAccount.name,
CRM_MSCRM.dbo.FilteredIncident.casetypecodename,
count(casetypecodename) as count
FROM
CRM_MSCRM.dbo.FilteredIncident
JOIN CRM_MSCRM.dbo.FilteredAccount on CRM_MSCRM.dbo.FilteredIncident.bb_accounttocaseid = CRM_MSCRM.dbo.FilteredAccount.accountid
GROUP BY
casetypecodename, name
如果我用PHP在一个相关的PHP列表中回显它,我会得到以下结果:
Company A 6
Company A 28
Company A 2
Company B 1
Company B 15
等等……
但我需要的是以下内容:
Company A 6, 28, 2
Company B 2, 1
我如何回显我的查询(或修改后的查询)以实现我需要的图表格式
['Name', 'incident', 'change'],
['Company A', 10, 24, ],
['Company B', 16, 22, ],
['Company C', 28, 19, ]
这是我的PHP代码,只是一个测试页面来获得我的结果。把这个插入图表不是问题,问题是图表所要求的格式。
$sql="
// query goes here
";
$stmt = sqlsrv_query( $conn, $sql );
if( $stmt === false) {die( print_r( sqlsrv_errors(), true) );}
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) )
{
echo $row [name];
echo $row [tellen]; // but this doesnt work
}
?>
我需要如何回应结果来实现我的目标?
Thanks in advance
首先,关于当前代码的一点注意事项:
echo $row [name];
你显然没有配置你的PHP开发框显示所有的错误消息,所以你是盲目编码。我建议你仔细看看,直到你看到你应该得到的两个通知:
Notice: Use of undefined constant name - assumed 'name'
Notice: Undefined index: name
我还建议您回顾PHP语法的基础知识,实际上它与受C语法启发的其他语言并没有太大的不同。了解字符串字面值(以及它们与常量的区别),当然还有数组。
虽然您可以重写SQL查询以返回您需要的确切数据格式,但当(如果我正确理解规范)一个简单的PHP数组就可以达到目的时,我认为这是不值得的。
我的印象是唯一的问题是你不熟悉编程语言中数组的概念。这里不是完整讲座的地方,但数组是一个值的列表,顺序很重要,这些值可以是任何PHP变量,包括其他数组。最后一位是转换的关键:
Company A 6
Company A 28
Company A 2
Company B 1
Company B 15
…到这个:
Company A 6, 28, 2
Company B 2, 1
当您在sqlsrv_fetch_array()
循环中读取结果集时,您可以将值存储在二维数组中。您可以在PHP手册的递归和多维数组示例中看到语法的作用,但在您的情况下,它应该是:
$values = [];
while ( $row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC) ) {
$values[$row['name']][] = $row['casetypecodename'];
}
你可以用var_dump()检查结果数组。完成后,您可以使用foreach()循环外部数组,并使用implode()将每个内部数组合并为逗号分隔的字符串。