首页 文章

通过PHP有条件地计算MYSQL列行和输出数据

提问于
浏览
2

对不起,我是新来的 . 只是想学习 . 我试图使用case和count函数有条件地计算SQL中特定条件发生的次数 . 这计算存储在eeg表中的男性/女性的数量 . 这是我的SQL查询 .

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

当我在mysql后端(phpmyadmin)上运行查询时,这会输出数据,但是在我的php文件中,我得到了这两行的“未定义索引”错误 . 所有其他行都完全没问题 . 我不知道如何将这些特定的数据集输出到变量 .

这是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 回答

  • 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()字段) .

相关问题