0

我正在使用 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
4

2 回答 2

2

您肯定必须重新考虑是的...为什么以所有神圣的名义,您滥用 group_concat 将某些内容从 SQL 内爆到 HTML 中?如果您要连接的字段中有 " 字符会怎样?

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

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

于 2009-05-08T06:25:20.110 回答
2

我的怀疑是,您会发现在数据库之外进行字符串操作会更快、更清晰。从长远来看,这条道路将充满可维护性问题。

于 2009-05-11T14:59:57.420 回答