2016-09-30 3 views
2

Извините, что я новичок в этом. Просто пытаюсь учиться. Я пытаюсь условно подсчитать количество случаев, когда определенное условие возникает в SQL, используя функции case и count. Это подсчитывает количество мужчин/женщин, хранящихся в таблице eeg. Вот мой SQL-запрос.Условно подсчитать строки столбцов MYSQL и выходные данные через PHP

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

Это выводит данные, когда я выполнить запрос на тузде бэкэнде (PhpMyAdmin), но в моем файле PHP, я получаю сообщение об ошибке «Index Неопределенной» для этих 2-х строк. Все остальные строки в порядке. Я не знаю, как выводить этот конкретный набор данных в переменную.

Вот SQL-запрос (в полном объеме) в файле PHP:

$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($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 researchCount,' и т. Д. – jeroen

+0

Может быть, «Пол» отличается от «Пол»? Вы используете разные кавычки вверх и вниз, поэтому ваши псевдонимы различны и нет индекса в массиве строк. – 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 Pls проверит последнее предложение моего ответа. – Shadow

+1

В интересах будущего посетителя, который просто смотрит на этот ответ, может показаться, что это все, что нужно сделать, как это было со мной – RiggsFolly

Смежные вопросы