簡體   English   中英

在PHP查詢中使用MSSQL STUFF

[英]Using MSSQL STUFF in query with PHP

因此,首先讓我解釋一下我要做什么,然后我要如何做,然后是問題出在哪里。 我正在嘗試創建mssql查詢以從數據庫中讀取發票。 每張發票本質上都是按發票ID分組在一起的單個費用的匯總。 結果是,不同的費用可能來自不同的容器(費用與容器相關)。 我需要做的是按發票ID對費用進行分組,並用諸如“ |”之類的分隔符來連接發票中所有費用的容器名稱。 我創建了一個臨時表@t,其中包含生成發票所需的所有費用和容器名稱。 在網上尋找了一段時間之后,我發現了STUFF命令,該命令似乎可以執行我想要的操作(出現並執行)。 所以這是我查詢的SQL:

select invoice_id, [Total Paid] RefNumCount,PayCount, MIN([rowNumber]) as rowNumber,     Vendor, Due, [Invoice Number], Company, MAX(Location) as Location,
 SUM([Funded Amount]) as [Funded Amount], 
 [Company ID], [Invoice ID], provider_reference_number, reconcile_date, all_providers
, STUFF(
        (
        select '|' + t1.[Container Name]
        from @t t1
        where t1.[Invoice Number] = t.[Invoice Number]
        order by t1.[Container Name]
        for XML PATH(''), TYPE
        ).value('.', 'nvarchar(100)')
        ,1,1,''
     ) as [Container Name] 

from @t t
group by invoice_id, [Total Paid], RefNumCount, PayCount, Vendor, Due, [Invoice Number], Company, 
    [Company ID], [Invoice ID], provider_reference_number, reconcile_date, all_providers

當我運行的是SQL Server Management Studio 2008時,它運行得很好。 但是,當我在PHP應用程序中使用此代碼時,查詢不起作用,並且最終由於嘗試讀取空結果集而導致致命錯誤。 有人知道為什么會發生此問題嗎? 或者,如果還有另一種串聯字符串的方法?

以下是用於調用查詢的PHP代碼段

           try{
                $q = cms_database::instance();
                 $result = $q->query($sql_statement);        
                 if (!$result) {
                       throw new Exception("Database Error [{$q->errno}] {$q->error}");
                  } 

                $invoices = array();
                while($row=$result->fetch_assoc()) {
                    $invoiceX = array();
                    $invoiceX["rowNum"]     = $row["rowNumber"];
                    $invoiceX["Vendor"]     = $row["Vendor"];
                    $invoiceX["Due"]        = $row["Due"];
                    $invoiceX["Acct"]       = $row["Container Name"];//$row["Account Number"];
                    $invoiceX["container_id"]=$row["container_id"];
                    $invoiceX["provider_id"] =$row["provider_id"];
                    $invoiceX["Invoice"]    = $row["Invoice Number"];
                    $invoiceX["Location"]   = $row["Company"];
                    $invoiceX["FundedAmt"]  = $row["Funded Amount"];
                    $invoiceX["InvoiceID"]  = $row["Invoice ID"];
                    $invoiceX["Notes"]      = $row["Notes"];
                    //merge the notes with notes from payment history that matches the invoiceid


                    $invoices[] = $invoiceX;
                }

                //filter out invoices with all reference numbers accounted for and remaining to be paid is $0.00



                $returnPackage["data"] = $invoices;
                //print $result;
            } catch (Exception $e){
                $returnPackage["success"]=0;
                $returnPackage["message"]=$e.message;

            }

我得到的錯誤是:
致命錯誤 :在第116行的D:[path_to_the_file] .php中的非對象上調用成員函數fetch_assoc()

第116行是代碼行

while($row=$result->fetch_assoc()) {

盡管這可能會晚一點,但是請嘗試使用此SQL調用。

select invoice_id, [Total Paid] RefNumCount,PayCount, MIN([rowNumber]) as rowNumber, 
       Vendor, Due, [Invoice Number], Company, MAX(Location) as Location,
       SUM([Funded Amount]) as [Funded Amount], [Company ID], [Invoice ID],
       provider_reference_number, reconcile_date, all_providers , 
       STUFF((select '|' + t1.[Container Name]
              from @t t1
              where t1.[Invoice Number] = t.[Invoice Number]
              order by t1.[Container Name]
              for XML PATH('')),1,1,'') as [Container Name] 
from @t t
group by invoice_id, [Total Paid], RefNumCount, PayCount, Vendor, Due, [Invoice Number], 
         Company, [Company ID], [Invoice ID], provider_reference_number, reconcile_date, 
         all_providers

當您添加“ |”時發生錯誤 在下面的select語句中,它將剝離xml標記,當您使用.value()嘗試提取數據時會導致錯誤。

STUFF((select '|' + ... from ... for XML PATH(''), TYPE).value('.', 'nvarchar(100)'),1,1,'')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM