CI活动记录样式sql查询

时间:2013-12-03 07:57:47

标签: mysql sql codeigniter

我是Code Igniter的新用户,就像其active record功能一样,现在有任何有用的步骤提示或任何指南< / strong>如何在SQL Queries样式中转换我的pervoiusly书面简单CI,就像这是我的写作简单查询

SELECT * 
FROM   hs_albums 
WHERE  id NOT IN (SELECT album_id 
                  FROM   hs_delete_albums 
                 WHERE  user_id = 72 
                         AND del_type = 1) 
       AND ( created = 72 
              OR club_id IN (SELECT cbs.id 
                             FROM   hs_clubs cbs 
                                    INNER JOIN hs_club_permissions cbp 
                                            ON cbs.id = cbp.club_id 
                             WHERE  cbp.user_id = 72 
                                    AND cbp.status = 2) 
              OR group_id IN (SELECT gps.id 
                              FROM   hs_groups gps 
                                     INNER JOIN hs_group_permissions grp 
                                             ON gps.id = grp.group_id 
                              WHERE  grp.user_id = 72 
                                     AND grp.status = 2) 
              OR comp_id IN (SELECT cmp.id 
                             FROM   hs_companies cmp 
                                    INNER JOIN hs_comp_permissions comp 
                                            ON cmp.id = comp.comp_id 
                             WHERE  comp.user_id = 72 
                                    AND comp.status = 2) ) 

1 个答案:

答案 0 :(得分:0)

简短的回答是:你没有

CodeIgniter的Active Record实现基本上是一个基于SQL的层,它使编写查询变得更容易:

  • 自动转义值
  • 自动为数据库生成适当的查询语法,以便可以更轻松地在数据库之间移植应用程序(例如,如果您没有使用Active Record编写查询,然后想从MySQL迁移到PostgreSQL ,那么你可能需要重写查询以使其适用于PostgreSQL)
  • 直接在PHP中提供查询语法,从而避免PHP和SQL之间的上下文切换。

然而,它无法完成SQL可以做的所有事情,虽然我总是尝试尽可能使用ActiveRecord,但最好还是忘记使用它并只使用$this->db->query()来直接写你的查询。在这种情况下,正如mamdouh alramadan所说,CodeIgniter不支持子查询,因此无论如何都无法使用ActiveRecord复制此查询。

要记住的是ActiveRecord是一个工具,而不是一个要求。如果您正在使用CodeIgniter而不使用ORM,则应该出于上述原因使用它。但是,一旦它开始妨碍,您应该考虑是否更好的做法是手动编写查询。