我真的想坚持使用ActiveRecord并且不使用直接的SQL ..有人可以帮助我将其转换为activerecord吗?
尝试从另一个表中获取电子邮件地址和联系人姓名。 map_userfields
表是每p.id
个一对多,多行。每p.id
每uf.fieldid
行一行。
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
答案 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/