【问题标题】:Active Record implementation of this SQL?这个 SQL 的 Active Record 实现?
【发布时间】:2010-10-24 16:14:06
【问题描述】:

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

【问题讨论】:

    标签: php sql activerecord codeigniter


    【解决方案1】:

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

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

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

    【讨论】:

    • 是的,我滥用 group_concat 来格式化 html.... 它实际上只是用于避免在 PHP 中单独处理循环。此查询可以带回 1,000 行。我想我只是让数据库为我完成工作......在这种情况下连接将不起作用(因为表结构和我们正在检索的数据的关系。
    • 哦,忘了 - 没有 " 字符。数据库字段是 int 和过滤的 varchar(最初创建时过滤)。
    • 马克,不要忘记你在数据库中的连接会使你的性能信息(关于查询)本质上不准确;确实,它们添加的量会很小,但移除它会更容易优化。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多