2016-11-04 99 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