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

Posted

技术标签:

【中文标题】Codeigniter 未显示 MySQL 查询获取的数组的正确结果。【英文标题】:Codeigniter not showing proper results for array fetched by MySQL query. 【发布时间】:2014-07-01 00:05:49 【问题描述】:

我正在使用带有 mysql 数据库的 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】:

您正在使用LEFT/RIGHT 连接,因此当您的表之间没有发现关联时,将返回空行,第二件事是您的表new_invoiceexecutive_client_unit_relation 都有列名booking_id 的通用名称并且在您的选择语句中,您正在执行select *,因此对于具有相同名称的列,我猜最后一个是空的,对于解决方案,您要么选择只需要的列,而不是全部像SELECT cb.*,要么列有与您的查询表同名,然后使用您希望提供的别名单独指定它们,但在查询中的 select 语句末尾,例如 SELECT *,cb.id AS booking_id,....

【讨论】:

以上是关于Codeigniter 未显示 MySQL 查询获取的数组的正确结果。的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter 数据库错误:1064 使用 MySQL 可能还有一些会话配置错误

带有 Codeigniter MYSQL 查询的数据表

如何使用codeigniter显示mysql数据透视表数据

PHP查询mysql的时候用了like和LIMIT分页,如何获得未分页但是like了的总数据量

Codeigniter 错误:调用未定义的函数 mysql_pconnect()

mysql慢查询中的Codeigniter会话查询