Codeigniter没有显示由MySQL查询获取的数组的正确结果。

时间:2014-05-13 10:49:28

标签: php mysql sql codeigniter

我正在使用mysign数据库的Codeigniter, 我有一个模型功能

public function get_all_data(){
    $this->output->enable_profiler(TRUE);
    $years = $this->input->post('year');
    $months = $this->input->post('month');
    $exec_ids = $this->input->post('exec_id');
    $query = $this->db->query("SELECT * FROM client_booking AS cb
        RIGHT OUTER JOIN executive_client_unit_relation AS ecur ON cb.id = ecur.booking_id
        LEFT OUTER JOIN new_invoice ON cb.id = new_invoice.booking_id
        WHERE ecur.executive_id IN (" . implode(',', $exec_ids) . ") AND MONTH(cb.booking_date) IN (" . implode(',', $months) . ") AND YEAR(cb.booking_date) IN (" . implode(',', $years) . ")");
    return $query->result();
}

由此生成的sql(如分析器中所示):

SELECT * FROM client_booking AS cb 
        RIGHT OUTER JOIN executive_client_unit_relation AS ecur ON cb.id = ecur.booking_id 
        LEFT OUTER JOIN new_invoice ON cb.id = new_invoice.booking_id 
        WHERE ecur.executive_id IN (4,5,6) AND MONTH(cb.booking_date) IN (1,2,3,4,5) AND YEAR(cb.booking_date) IN (2013,2014)

我的问题是,当我booking_id此查询的结果时,NULL值设置为var_dump()。 另一方面,当我在phpmyadmin中运行SQL时,一切顺利,我可以看到booking_id

PS:client_booking表的主键是id,这是所有其他表的booking_id

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您正在使用LEFT/RIGHT个连接,所以当您的表之间没有找到关联时,将返回一个空行,第二个是您的表new_invoiceexecutive_client_unit_relation都有通用的名称列名booking_id并且在你的select语句中你正在进行select *所以对于具有相同名称的列我猜测最后一个是否为空,对于解决方案,您要么只选择所需的列而不是所有类似于SELECT cb.*或者列与查询表具有相同的名称,然后使用您希望提供的别名单独指定它们,但在查询中的select语句末尾如SELECT *,cb.id AS booking_id,....