2016-09-30 72 views
2

對不起,我是新手。只是想學習。我試圖有條件地使用case和count函數統計SQL中發生特定情況的次數。這個計數存儲在eeg表中的男性/女性的數量。這是我的SQL查詢。通過PHP有條件地計算MYSQL列的行數和輸出數據

SELECT COUNT(CASE WHEN `Gender` = 'Male' THEN 1 END), 
     COUNT(CASE WHEN `Gender` = 'Female' THEN 1 END) 
FROM `eeg` 

當我運行的MySQL後端(phpMyAdmin的)查詢該輸出數據,但在我的PHP文件,我得到了這2行的「未定義指數」的錯誤。所有其他行都非常好。我不知道如何將這些特定的數據集輸出到變量中。

這裏是在PHP文件SQL查詢(全稱):

$result = mysql_query("SELECT MONTH(ScanDate), YEAR(ScanDate), 
          COUNT(Investigation), 
          COUNT(CASE WHEN `Gender` = 'Male' THEN 1 END), 
          COUNT(CASE WHEN `Gender` = 'Female' THEN 1 END), 
          SUM(InvestigationAmount), SUM(AmountDue) 
         FROM eeg 
         WHERE Investigation = '{$investigation}' 
          AND ScanDate BETWEEN '{$ScanDate1}' 
          AND '{$ScanDate2}'"); 

這裏是while循環(全稱):

while($row=mysql_fetch_array($result)){ 
    $month_doe=$row['MONTH(ScanDate)']; 
    $year_doe=$row['YEAR(ScanDate)']; 
    $si=$row['COUNT(Investigation)']; 
    $male=$row["COUNT(CASE WHEN 'Gender' = 'Male' THEN 1 END)"]; 
    $female=$row["COUNT(CASE WHEN 'Gender' = 'Female' THEN 1 END)"]; 
    $sum_investigation=number_format($si); 
    $sia=$row['SUM(InvestigationAmount)']; 
    $sum_investigationamount=number_format($sia); 
    $srd=$row['SUM(AmountDue)']; 
    $sum_rebatedue=number_format($srd); 
} 

謝謝您的幫助。從字面上拉我的頭髮,但愛學習和提高。是的,請求mysql_query折舊:d

截圖如下:

代碼截圖

enter image description here

+1

請將代碼作爲文本粘貼,而不是作爲圖片,如果與答案相關我們無法複製/粘貼圖片,我們也不想重寫它 – RiggsFolly

+0

您需要爲您計算的列別名:'COUNT(Investigation)AS investigationCount,'等。 – jeroen

+0

也許'Gender'與'Gender'不同?你上下使用不同的引號,所以你的別名是不同的,行數組中沒有索引 – daniherculano

回答

3

使用的別名表情和使用別名,訪問PHP表達式的結果:

$result = mysql_query("SELECT MONTH(ScanDate) as sdyear, 
           YEAR(ScanDate) as sdmonth, 
          COUNT(Investigation) as investigation, 
          COUNT(CASE WHEN `Gender` = 'Male' THEN 1 END) as MaleCount, 
          COUNT(CASE WHEN `Gender` = 'Female' THEN 1 END) as FemaleCount, 
          SUM(InvestigationAmount) as investigationamount, 
          SUM(AmountDue) as amountdue 
         FROM eeg 
         WHERE Investigation = '{$investigation}' 
          AND ScanDate BETWEEN '{$ScanDate1}' 
          AND '{$ScanDate2}'"); 


while($row=mysql_fetch_array($result)){ 
    $month_doe=$row['sdmonth']; 
    $year_doe=$row['sdyear']; 
    $si=$row['investigation']; 
    $male=$row["MaleCount"]; 
    $female=$row["FemaleCount"]; 
    $sum_investigation=number_format($si); 
    $sia=$row['investigationamount']; 
    $sum_investigationamount=number_format($sia); 
    $srd=$row['amountdue)']; 
    $sum_rebatedue=number_format($srd); 
} 

我會使用這種方法爲每個字段是一個表達式(其他sum()字段在th e以上查詢)。

+2

那麼'COUNT()'和'SUM()'和'MONTH()'列也是如此。如果你要完成這項工作,請全部完成 – RiggsFolly

+0

@RiggsFolly請查看我答案的最後一句。 – Shadow

+1

爲了這個答案的未來訪問者的利益,它可能看起來像是所有這些都需要完成,就像它對我來說一樣 – RiggsFolly