2016-12-13 7 views
-1

Привет, ребята, я уже изучил это в другом вопросе, но я не получил ответа, поэтому решите спросить здесь. Надеюсь, ты поможешь мне, ребята. Возникла проблема:Подсчитать данные за каждый месяц

У меня есть 2 таблицы, которые являются tblCourse и tblData. Я сохраняю весь список курсов в tblCourse, а в tblData Я храню имя человека и курс. Теперь, что я хочу сделать, я хочу получить общее количество всех людей, которые занимаются определенным курсом каждый месяц.

Для примера:

---------------------------------------------------------------------------- 
Course | Jan | feb | Mar | Apr | May | ......................| Dec | Total | 
---------------------------------------------------------------------------- 
Course1 | 2 | 3 | 0 | 0 | 1 | ......................| 2 | 8 |  
---------------------------------------------------------------------------- 
Course2 | 2 | 3 | 2 | 0 | 1 | ......................| 2 | 10 |  
---------------------------------------------------------------------------- 
Course3 | 2 | 3 | 1 | 0 | 1 | ......................| 2 | 9 |  
---------------------------------------------------------------------------- 

Вот мой код:

<?php 
    $query = $this->db->query("SELECT * FROM tblcourse where category = 'Soft' and inex = 'inhouse' ORDER by course_name ASC"); 


    foreach ($query->result() as $row){ 
    ?> 
     <tr> 
     <td>Id</td> 
     <td><?php echo $row->course_name; ?></td> // Output the Course Name 
     <td class="center"><?php echo $row->days; ?></td> //Output the Training days 

<?php 
$course = $row->course_name;  
$query_jan = $this->db->query("SELECT * FROM tbldata where course like '%$course%' and course_end < '2016-11-30' and course_end >= '2016-11-01'"); 

?> 

<td><?php echo $query_jan->num_rows(); ?></td> // Output the corresponding number of course taken by the person for the month of january 

<? php 
} // end of foreach 
?> 

Heres' структура моей базе данных:

Table 1: tblCourse 
Fields: ID, Course_name, Category, Training_days 

Table 2: tblData 
Fields: ID, Trainees_name, Course_taken, Date_start, Date_end 

Спасибо, ребята, надеюсь, что вы можете мне помочь!

Извините за мой новичка код, я только начинаю развиваться, используя PHP ..

EDIT: Ребята я могу запросить это в одном запросе? Если да? можете ли вы любезно показать мне, как это сделать? Спасибо!

+1

Какая связь между 'tblCourse' и' tblData'? Если у вас есть отношения, вы можете выполнить SQL-JOIN и получить нужный результат ... – Poiz

+0

вы можете показать мне, как? позволяет предположить, что course_taken является иностранным ключом от tbldata – zeus2026

ответ

-1
SELECT COUNT(Trainees_name) FROM tbldata where Course_taken like '%$course%' and Date_start < '2016-11-30' and Date_end >= '2016-11-01'" 
0

Учитывая Course_taken, как внешний ключ к таблице tblCourse.

select tblCourse.Course_name, 
     Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec,(Jan+Feb+Mar+Apr+May+Jun+Jul+Aug+Sep+Oct+Nov+Dec) as `Total`  
from (
    select 
    tblCourse.Course_name+ 

     sum(CASE WHEN month(tblData.Date_start)=1 or month(tblData.Date_end)=1 THEN 1 else 0 end) as `Jan`, 
     sum(CASE WHEN month(tblData.Date_start)=2 or month(tblData.Date_end)=2 THEN 1 else 0 end) as `Feb`, 
     sum(CASE WHEN month(tblData.Date_start)=3 or month(tblData.Date_end)=3 THEN 1 else 0 end) as `Mar`, 
     sum(CASE WHEN month(tblData.Date_start)=4 or month(tblData.Date_end)=4 THEN 1 else 0 end) as `Apr`, 
     sum(CASE WHEN month(tblData.Date_start)=5 or month(tblData.Date_end)=5 THEN 1 else 0 end) as `May`, 
     sum(CASE WHEN month(tblData.Date_start)=6 or month(tblData.Date_end)=6 THEN 1 else 0 end) as `Jun`, 

     sum(CASE WHEN month(tblData.Date_start)=7 or month(tblData.Date_end)=7 THEN 1 else 0 end) as `Jul`, 
     sum(CASE WHEN month(tblData.Date_start)=8 or month(tblData.Date_end)=8 THEN 1 else 0 end) as `Aug`, 
     sum(CASE WHEN month(tblData.Date_start)=9 or month(tblData.Date_end)=9 THEN 1 else 0 end) as `Sep`, 
     sum(CASE WHEN month(tblData.Date_start)=10 or month(tblData.Date_end)=10 THEN 1 else 0 end) as `Oct`, 
     sum(CASE WHEN month(tblData.Date_start)=11 or month(tblData.Date_end)=11 THEN 1 else 0 end) as `Nov`, 
     sum(CASE WHEN month(tblData.Date_start)=12 or month(tblData.Date_end)=12 THEN 1 else 0 end) as `Dec` 

    from tblCourse 
    left join tblData on tblCourse.id=tblData.Course_taken 
    group by tblCourse.id 
) data 

Примечание: Убедитесь, что Date_start и Date_end должны быть того же года.

+0

Спасибо! плохо попробуйте это! плохо дать отзыв как можно скорее .. – zeus2026

+0

привет, я попробую ваш запрос, но есть ошибка. Я вставляю запрос выше, чтобы вы могли легко увидеть запрос. Надеемся на ваш ответ. – zeus2026

0

@abhishek Ginani FYI, я меняю имя колонки имя_команды на имя_сочетания, date_start в course_start и date_end в course_end.

я пытаюсь запустить в PHPMyAdmin, но есть ошибка о том, что

1054 - Неизвестный столбец «tblcourse.competence_name» в «списке поля»

Я пытаюсь поставить запятую и знак +, но только производить такая же ошибка.

select tblcourse.competence_name, 
     Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dece,(Jan+Feb+Mar+Apr+May+Jun+Jul+Aug+Sep+Oct+Nov+Dece) as `Total`  
from (
    select 
    tblcourse.competence_name, 

     sum(CASE WHEN month(tbldata.course_start)=1 or month(tbldata.course_end)=1 THEN 1 else 0 end) as `Jan`, 
     sum(CASE WHEN month(tbldata.course_start)=2 or month(tbldata.course_end)=2 THEN 1 else 0 end) as `Feb`, 
     sum(CASE WHEN month(tbldata.course_start)=3 or month(tbldata.course_end)=3 THEN 1 else 0 end) as `Mar`, 
     sum(CASE WHEN month(tbldata.course_start)=4 or month(tbldata.course_end)=4 THEN 1 else 0 end) as `Apr`, 
     sum(CASE WHEN month(tbldata.course_start)=5 or month(tbldata.course_end)=5 THEN 1 else 0 end) as `May`, 
     sum(CASE WHEN month(tbldata.course_start)=6 or month(tbldata.course_end)=6 THEN 1 else 0 end) as `Jun`, 

     sum(CASE WHEN month(tbldata.course_start)=7 or month(tbldata.course_end)=7 THEN 1 else 0 end) as `Jul`, 
     sum(CASE WHEN month(tbldata.course_start)=8 or month(tbldata.course_end)=8 THEN 1 else 0 end) as `Aug`, 
     sum(CASE WHEN month(tbldata.course_start)=9 or month(tbldata.course_end)=9 THEN 1 else 0 end) as `Sep`, 
     sum(CASE WHEN month(tbldata.course_start)=10 or month(tbldata.course_end)=10 THEN 1 else 0 end) as `Oct`, 
     sum(CASE WHEN month(tbldata.course_start)=11 or month(tbldata.course_end)=11 THEN 1 else 0 end) as `Nov`, 
     sum(CASE WHEN month(tbldata.course_start)=12 or month(tbldata.course_end)=12 THEN 1 else 0 end) as `Dece` 

    from tblcourse 

    left join tbldata on tblcourse.competence_name = concat('%',tbldata.course,'%') 

    group by tblcourse.competence_name 

) data 
+0

Проверьте имя таблицы или столбца, который вы используете. В соответствии с структурой, которую вы обсуждали, нет столбца с именем 'tblCourse' –

+0

Я уже изменил это l eft join tbldata на tbldata.course как concat ('%', tblcourse.competence_name, '%') но ошибка существует? могу ли я знать, какова цель данных в последней строке? – zeus2026

+0

Данные являются псевдонимом таблицы подзапроса. –

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