【问题标题】:CodeIgniter Active Record Queries W/ Sub QueriesCodeIgniter Active Record 查询 WITH/ 子查询
【发布时间】:2012-04-17 09:30:39
【问题描述】:

问题:

我真的想坚持使用 ActiveRecord 而不是直接使用 SQL。有人可以帮我将其转换为 activerecord 吗?

试图从另一个表中获取电子邮件地址和联系人姓名。 map_userfields 表是一个一对多的,每个 p.id 的多行。每p.iduf.fieldid 一行。

查看此屏幕截图以获取对 map_userfields 表的引用:

当前非活动记录查询

SELECT
p.id,
(SELECT uf.fieldvalue FROM map_userfields uf WHERE uf.pointid = p.id AND uf.fieldid = 20) As ContactName,
(SELECT uf.fieldvalue FROM map_userfields uf WHERE uf.pointid = p.id AND uf.fieldid = 31) As ContactEmail
FROM
map_points p
WHERE
/** $pointCategory is an array of categories to look for **/
p.type IN($pointCategory)

注意:我使用的是 CodeIgniter 2.1.x、MySQL 5.x、php 5.3

【问题讨论】:

    标签: mysql codeigniter activerecord


    【解决方案1】:

    子查询确实可以在 codeigniter 中使用,但有一点小技巧。我发现在 system/database/DB_active_rec.php 中有两个函数名为 _compile_select 和 _reset_select。如果您从两者中删除受保护的词,您将能够将这些功能用于子查询 这是一个使用教程

    http://heybigname.com/2009/09/18/using-code-igniters-active-record-class-to-create-subqueries/

    【讨论】:

      【解决方案2】:

      CodeIgniter 的 Active Record 不支持开箱即用的子查询。您需要下载CodeIgniter Subqueries class

      在 CodeIgniter wiki 中,有一个 article on how to subqueries

      【讨论】:

        【解决方案3】:

        您可以使用 CI 的 activeRecords 选择您需要的任何内容,只要您告诉 CI 不要解析您的字符串

        $this->db->select('p.id,
        (SELECT uf.fieldvalue FROM map_userfields uf WHERE uf.pointid = p.id AND uf.fieldid = 20) As ContactName,
        (SELECT uf.fieldvalue FROM map_userfields uf WHERE uf.pointid = p.id AND uf.fieldid = 31) As ContactEmail
        ',TRUE);
        $this->db->from('map_points p');
        $this->db->where_in('p.type',$pointCategory);
        $q = $this->db->get();
        

        【讨论】:

        • 谢谢,有没有办法避免这种情况?或者这是否被认为是可用的最佳实践?
        猜你喜欢
        • 2016-03-15
        • 2013-02-22
        • 2013-01-09
        • 1970-01-01
        • 2014-06-26
        • 1970-01-01
        • 1970-01-01
        • 2015-07-07
        • 1970-01-01
        相关资源
        最近更新 更多