Active Record实现了这个SQL?

时间:2009-05-08 00:41:21

标签: php sql activerecord codeigniter

我正在使用CodeIgniter。我的数据库是MySQL 5.下面的SQL语句工作正常,但我认为它与MSSQL,PG等不兼容。我想知道是否可以使用CI中的Active Record类来实现该语句,从而使其完全跨数据库?

我认为“GROUP_CONCAT”就是我要倒下的地方......

编辑 - 在CodeIgniter板上找到

  但是,应该注意到这一点   CONCAT是特定于数据库的。不是   实际上是活动记录的一部分   图书馆,虽然我很确定   大多数(如果不是全部)数据库支持   引擎“。

我可能不得不重新考虑这一点,因为它看起来不可能使用纯粹的Active Record。

SELECT system.system_id,
       system.uuid,
       system.hostname,
       system.man_description,
       system.man_ip_address,
       system.os_short_name,
       system.os_full_name,
       system.man_type,
       system.man_icon,
       GROUP_CONCAT(DISTINCT '<a href="', oa_group.group_id, '">', oa_group.group_description, '</a>' ORDER BY group_description SEPARATOR ', ') as tag
FROM system,
       oa_group,
       oa_group_sys
WHERE system.system_id IN (
               SELECT system.system_id
               FROM system,
                       oa_group_sys,
                       oa_group,
                       oa_group_user
               WHERE system.man_status = 'production' AND
                       system.system_id = oa_group_sys.system_id AND
                       oa_group_sys.group_id = oa_group.group_id AND
                       oa_group.group_id = oa_group_user.group_id AND
                       oa_group_user.user_id = '1' ) AND
       system.system_id = oa_group_sys.system_id AND
       oa_group_sys.group_id = oa_group.group_id
GROUP BY system.system_id

2 个答案:

答案 0 :(得分:2)

你肯定不得不重新思考是的...为什么在所有神圣的名义中你滥用group_concat从SQL中将某些内容压入HTML?如果你在场上有一个“角色”,会发生什么?

良好的经验法则是: 使用数据库进行存储 使用PHP获取数据并将其转换为HTML或PDF,或者您想要的任何类型的输出。

另外,您可能想要阅读使用JOINS?你现在正在运行2个查询,其中一个有一些连接和一个精心构建的where子句就足够了。

答案 1 :(得分:2)

我怀疑你会发现在数据库之外进行字符串操作既快又干净。从长远来看,这条道路将充满可维护性问题。