2016-12-13 16 views
-1

こんにちは私はすでに他の質問でこれを研究しましたが、私は答えを得ていないので、ここで質問することにしました。あなたが私を助けてくれることを願っています。私はtblDataに、私は人の名前を格納していますし、何もちろん、彼らが取っている間、私はtblCourseに私のコースリストのすべてを格納されており、tblCourseとtblDataある2つのテーブルを持っている毎月のデータを集計

: はここで質問/問題です。今、私がしたいのは、毎月特定のコースを受講している人の総数を取得したいのです。例については

---------------------------------------------------------------------------- 
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 
?> 

相続人は私のデータベースの構造:男はあなたが私を助けることができると思います

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:Guysは、私は単一のクエリでこれを照会することができますか?そうであれば?親切に私にどのように表示できますか?ありがとうございました!

+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

テーブルtblCourseからCourse_takenとして外部キーを考えます。

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_startDate_endは、同じ年のものでなければならないことを確認してください。

+0

ありがとう!この1つを試してみてください! – zeus2026

+0

こんにちは、私はあなたのクエリを試してみますが、上記のクエリを貼り付けるのにエラーがありますので、簡単にクエリを見ることができます。あなたの答えを期待して。 – zeus2026

0

@abhishek Ginani FYI、私は自分の列名course_nameをcompetence_nameに、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

私は既にこれを変更しています tbdata.courseのtbldataでの連結はconcat( '%'、tblcourse.competence_name、 '%')のようになります しかし、エラーは存在しますか?最後の行のデータの目的は何か分かりますか? – zeus2026

+0

データはサブクエリのテーブルエイリアスです。 –

関連する問題