选择MAX CASE WHEN查询

时间:2015-03-18 03:39:10

标签: php mysql codeigniter

我有桌子,他们是: tb_penelaah

-----------------------------
id_penelaah | nama_penelaah |
-----------------------------
1           | penelaah 1    |
2           | penelaah 2    |
-----------------------------

tb_skill

----------------------------
id_sill | nama_skill       |
----------------------------
1       | skill 1          |
2       | skill 2          |
----------------------------

tb_skill_penelaah

-----------------------------------------
skill   | penelaah  | status  | priority|
-----------------------------------------
1       | 1         | A       |  1      |
2       | 1         | B       |  1      |
1       | 2         | A       |  1      |
2       | 2         | A       |  2      |
----------------------------------------

所以我想在这样的页面中回显数据(在PHP Codeigniter中):

Penelaah 1的详细信息:

Nama Penelaah : Penelaah 1
Skill A 1 : skill 1
Skill A 2 : -
Skill B 1 : skill 2
SKill B 2 : -
Penelaah 2的详细信息:

Nama Penelaah : Penelaah 2
Skill A 1 : skill 1
Skill A 2 : skill 2
Skill B 1 : -
SKill B 2 : -

我尝试过这样的查询:

function det_skill_pen($id){
        $this->db
        ->query("SELECT a.nama_penelaah,a.id_penelaah,
            MAX(CASE WHEN b.p_status = 'A' AND b.p_urutan = 1 THEN c.nama_skill END) 'SKILL_A1',
            MAX(CASE WHEN b.p_status = 'A' AND b.p_urutan = 2 THEN c.nama_skill END) 'SKILL_A2',
            MAX(CASE WHEN b.p_status = 'B' AND b.p_urutan = 1 THEN c.nama_skill END) 'SKILL_B1',
            MAX(CASE WHEN b.p_status = 'B' AND b.p_urutan = 2 THEN c.nama_skill END) 'SKILL_B2'
            FROM tb_penelaah a
            LEFT JOIN tb_skill_p b ON b.p_penelaah = a.id_penelaah
            LEFT JOIN tb_skill c ON c.id_skill = b.p_skill
            GROUP BY a.id_penelaah
            ORDER BY id_penelaah");
        $query=$this->db->get();
        return $query;
    }

但是发生了错误

  

发生数据库错误

     

没有使用表格

     

SELECT *

任何人都可以帮忙吗?我在sql查询中表现不佳

1 个答案:

答案 0 :(得分:1)

已解决!!!

我已经编辑了我的Codeigniter模型:

function det_skill_pen($id){
        $this->db
        ->query("SELECT a.nama_penelaah,a.id_penelaah,
            MAX(CASE WHEN b.p_status = 'A' AND b.p_urutan = 1 THEN c.nama_skill END) 'SKILL_A1',
            MAX(CASE WHEN b.p_status = 'A' AND b.p_urutan = 2 THEN c.nama_skill END) 'SKILL_A2',
            MAX(CASE WHEN b.p_status = 'B' AND b.p_urutan = 1 THEN c.nama_skill END) 'SKILL_B1',
            MAX(CASE WHEN b.p_status = 'B' AND b.p_urutan = 2 THEN c.nama_skill END) 'SKILL_B2'
            FROM tb_penelaah a
            LEFT JOIN tb_skill_p b ON b.p_penelaah = a.id_penelaah
            LEFT JOIN tb_skill c ON c.id_skill = b.p_skill
            GROUP BY a.id_penelaah
            ORDER BY id_penelaah");
        $query=$this->db->get();
        return $query;
    }

到此:

function det_skill_pen($id){
        $query=$this->db->query("SELECT *,
            MAX(CASE WHEN b.p_status = 'A' AND b.p_urutan = 1 THEN c.nama_skill END) 'SKILL_A1',
            MAX(CASE WHEN b.p_status = 'A' AND b.p_urutan = 2 THEN c.nama_skill END) 'SKILL_A2',
            MAX(CASE WHEN b.p_status = 'B' AND b.p_urutan = 1 THEN c.nama_skill END) 'SKILL_B1',
            MAX(CASE WHEN b.p_status = 'B' AND b.p_urutan = 2 THEN c.nama_skill END) 'SKILL_B2'
            FROM tb_penelaah a
            LEFT JOIN tb_skill_p b ON b.p_penelaah = a.id_penelaah
            LEFT JOIN tb_skill c ON c.id_skill = b.p_skill
            WHERE a.id_penelaah = $id
            GROUP BY a.id_penelaah
            ORDER BY id_penelaah");
        return $query;
    }

现在工作正常,感谢@Raptor提供的答案和建议