2016-11-04 78 views
1

这是我在stackoverflow上的第一篇文章,但我多次使用该网站,所以首先我要感谢你们与世界分享的所有伟大的答案。 我用谷歌和搜索功能之前,我张贴在这里,但我无法找到解决我的问题的答案。mssql回复某些结果

目标是创建一个谷歌堆积图,但他们需要一个非常特定的数组格式。 在大多数情况下,我设法创建一个图,但对于这一个我无法得到正确的输出的MSSQL查询。

结果我通过查询得到的是在相关的PHP名单与PHP以下

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 

实现了这一结果。如果我赞同这个我得到以下内容:

Company A 6 
Company A 28 
Company A 2 
Company B 1 
Company B 15 

etc ...

但我需要的是以下几点:

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 
        } 

     ?> 

我该如何回应结果以达到我的目标?

在此先感谢

+0

你的PHP脚本在哪里?你试过什么了 ? –

+0

您只需要一个二维数组,不是吗? –

+0

@ Alvaro Gonzalez:是的,我需要一个维数组 – Stage

回答

0

首先,关于当前的代码稍加注意:

echo $row [name]; 

你显然让你的编码没有配置PHP开发框来显示所有的错误信息盲目。我建议你看个明白,直到你可以看到两个通知你应该得到:

Notice: Use of undefined constant name - assumed 'name' 
    Notice: Undefined index: name 

我也建议您查看PHP语法,这实际上是从灵感来自其他语言差别不大的基本知识C语法。了解string literals(和他们不同,从constants),当然还有arrays


因为你可以重写你的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()回路设置你可以存储值2-二维数组。你可以看到在行动的语法在PHP手册Recursive and multi-dimensional arrays例子,但是,你的情况,这会是:

$values = []; 
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) { 
    $values[$row['name']][] = $row['casetypecodename']; 
} 

您可以检查与例如生成的数组var_dump()。完成后,可以使用foreach()循环外部数组,并将每个内部数组合并为一个逗号分隔的字符串,其中包含implode()

+0

感谢您的建议,可能的解决方案和反馈。 不幸的是,这段代码仍然没有我需要的。现在它只显示这样的公司的第一个aantal数字: 公司A 6 公司B 1 它不显示其他数字,我会尝试解决我自己的问题。 你说我盲目编码,那不是真的,我确实有PHP启用的错误消息,是的,在'名称'中有一个错误 我不是程序员,但它是我实习的一部分来建立这个内联网页。这是我需要的唯一“硬”SQL查询,并且我拥有基本的编程和SQL技巧。 – Stage

+0

我的不好,我有一对方括号丢失。 –

+0

非常感谢您的快速回复。解决方案有效! – Stage