CodeIgniter活动记录查询WITH /子查询

时间:2012-04-03 17:15:27

标签: mysql codeigniter activerecord

问题:

我真的想坚持使用ActiveRecord并且不使用直接的SQL ..有人可以帮助我将其转换为activerecord吗?

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

请参阅此屏幕截图以获取对map_userfields表的引用:

enter image description here

当前非活动记录查询

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

只要告诉CI不要解析字符串

,您就可以选择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();

答案 2 :(得分:0)

子查询确实在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/