Php 如何编写mysql查询以获得以下结果

Php 如何编写mysql查询以获得以下结果,php,mysql,codeigniter,Php,Mysql,Codeigniter,我有两张桌子 1) students 2) fees_paid 学生表如下 id Name 1 xxxxxx 2 yyyyyy 3 zzzzzz 支付的费用如下: id student_id date fees_paid 1 1 02-01-2015 250 2

我有两张桌子

1) students
2) fees_paid
学生表如下

id              Name
 1              xxxxxx
 2              yyyyyy
 3              zzzzzz
支付的费用如下:

id    student_id           date            fees_paid
1      1                02-01-2015             250
2      1                05-01-2015             500
3      2                07-01-2015             400
4      1                06-02-2015             100
5      2                08-02-2015             200
6      3                04-05-2015             1000
我需要一个结果表,如下所示

Name         Jan       Feb     Mar    April     May


xxxxxx      750       100       0        0       0
yyyyyy      400       200       0        0       0
zzzzzz      0         0         0        0      1000
如何编写mysql查询以获取上述结果集请尝试以下操作:

SELECT
    s.name,
    sum(case when month(f.date) = '01' then f.fees_paid else 0 end) as 'Jan',
    sum(case when month(f.date) = '02' then f.fees_paid else 0 end) as 'Feb',
    sum(case when month(f.date) = '03' then f.fees_paid else 0 end) as 'Mar',
    sum(case when month(f.date) = '04' then f.fees_paid else 0 end) as 'April',
    sum(case when month(f.date) = '05' then f.fees_paid else 0 end) as 'May'
FROM fees_paid f 
INNER JOIN students s ON s.id = f.student_id
GROUP BY s.id
试试这个:

SELECT
    s.name,
    sum(case when month(f.date) = '01' then f.fees_paid else 0 end) as 'Jan',
    sum(case when month(f.date) = '02' then f.fees_paid else 0 end) as 'Feb',
    sum(case when month(f.date) = '03' then f.fees_paid else 0 end) as 'Mar',
    sum(case when month(f.date) = '04' then f.fees_paid else 0 end) as 'April',
    sum(case when month(f.date) = '05' then f.fees_paid else 0 end) as 'May'
FROM fees_paid f 
INNER JOIN students s ON s.id = f.student_id
GROUP BY s.id
试试这个

$this->db->select('s.name,
sum(case when month(f.date) = '01' then f.fees_paid else 0 end) Jan,
sum(case when month(f.date) = '02' then f.fees_paid else 0 end) Feb,
sum(case when month(f.date) = '03' then f.fees_paid else 0 end) Mar,
sum(case when month(f.date) = '04' then f.fees_paid else 0 end) April,
sum(case when month(f.date) = '05' then f.fees_paid else 0 end) May');
$this->db->from('fees_paid');
$this->db->join('student', 'student.id = fees_paid.id', 'left');
$this->db->group_by("s.id"); 

$query = $this->db->get();
试试这个

$this->db->select('s.name,
sum(case when month(f.date) = '01' then f.fees_paid else 0 end) Jan,
sum(case when month(f.date) = '02' then f.fees_paid else 0 end) Feb,
sum(case when month(f.date) = '03' then f.fees_paid else 0 end) Mar,
sum(case when month(f.date) = '04' then f.fees_paid else 0 end) April,
sum(case when month(f.date) = '05' then f.fees_paid else 0 end) May');
$this->db->from('fees_paid');
$this->db->join('student', 'student.id = fees_paid.id', 'left');
$this->db->group_by("s.id"); 

$query = $this->db->get();

你所说的Codeigniter查询是什么意思?ActiveRecord?PDO?嗯,到目前为止你都尝试了什么?普通的MYSQL查询也可以。实际上,我不知道如何在一个查询中实现这一点。但我可以在多个查询中完成这项工作,您会从中了解到:Codeigniter查询是什么意思?ActiveRecord?PDO?嗯,到目前为止你都尝试了什么?普通的MYSQL查询也可以。实际上,我不知道如何在一个查询中实现这一点。但我可以在多个查询中找到答案,你会从中得到一些想法:伟大的黄鸟!你太棒了。这正是我想要的。你搞定了,伙计!谢谢,但是这个查询不会返回一个根本没有交学费的学生的名字,ryt?但我甚至希望这些名字在所有月份都显示为零。知道吗?我也知道。。。我刚刚做了一个伟大的黄鸟!你太棒了。这正是我想要的。你搞定了,伙计!谢谢,但是这个查询不会返回一个根本没有交学费的学生的名字,ryt?但我甚至希望这些名字在所有月份都显示为零。知道吗?我也知道。。。我刚做了一个左会合