【问题标题】:Count data in every month统计每个月的数据
【发布时间】:2017-04-28 03:41:38
【问题描述】:

我已经在其他问题中对此进行了研究,但没有得到答案,所以决定在这里提问。

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

这是我的数据库的结构:

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

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

我刚刚开始使用 php 进行开发。

我可以在单个查询中查询吗?

【问题讨论】:

  • tblCoursetblData是什么关系?如果您有关系,那么您可以执行 SQL-JOIN 并获得您想要的结果...
  • 你能告诉我怎么做吗?让我们假设 course_taken 是来自 tbldata 的外键

标签: php html mysql codeigniter


【解决方案1】:

考虑将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_startDate_end 应该是同一年的。

【讨论】:

  • 您好,我尝试了您的查询,但出现错误我将查询粘贴在上面,以便您可以轻松查看查询。期待你的回答..
【解决方案2】:
SELECT COUNT(Trainees_name) FROM tbldata where Course_taken like '%$course%' and Date_start < '2016-11-30' and Date_end >= '2016-11-01'"

【讨论】:

    猜你喜欢
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多