0

私はCodeIgniterを使用しています。私のデータベースはMySQL5です。以下のSQLステートメントは正常に機能しますが、MSSQL、PGなどと実際には互換性がないと考えています。CIのActiveRecordクラスを使用してステートメントを実装できるかどうか疑問に思っているので、データベースを完全に横断することができますか?

「GROUP_CONCAT」は私が倒れるところだと思います...

編集-CodeIgniterボードにあります

「ただし、CONCATはデータベース固有であることに注意してください。すべてではないにしても、ほとんどのデータベースエンジンでサポートされていると確信していますが、実際にはアクティブレコードライブラリの一部ではありません。」

純粋なActiveRecordを使用することは不可能であるように思われるため、これを再考する必要があるかもしれません。

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 つのクエリを実行していますが、そのうちの 1 つはいくつかの結合と適切に構築された where 句で十分です。

于 2009-05-08T06:25:20.110 に答える
2

私の疑いでは、データベースの外で文字列操作を行う方が高速でクリーンであることがわかると思います。長期的には、この道は保守性の問題をはらんでいます。

于 2009-05-11T14:59:57.420 に答える