我正在使用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
答案 0 :(得分:2)
你肯定不得不重新思考是的...为什么在所有神圣的名义中你滥用group_concat从SQL中将某些内容压入HTML?如果你在场上有一个“角色”,会发生什么?
良好的经验法则是: 使用数据库进行存储 使用PHP获取数据并将其转换为HTML或PDF,或者您想要的任何类型的输出。
另外,您可能想要阅读使用JOINS?你现在正在运行2个查询,其中一个有一些连接和一个精心构建的where子句就足够了。
答案 1 :(得分:2)
我怀疑你会发现在数据库之外进行字符串操作既快又干净。从长远来看,这条道路将充满可维护性问题。