질문/조언질답게시판
Extra Form
PHP PHP 7.0
CMS Rhymix 1.x

구현하고자 하는 건

- 특정 모듈 내에서

- url의 파라미터로 입력된 확장변수 값을 가지는 문서 목록을 기준으로

- 해당 문서들이 소속되어 있는 카테고리들의 1) 제목과 2) 문서갯수

를 가져오는 겁니다.

 

어렵게 어렵게ㅜ 다음과 같이 xml 쿼리를 짜긴 했는데요.

일단 원하는 작동이 구현되긴 합니다만, 딱 보기에도 너저분해서ㅠ

문법상 효율성에 무리가 있는지 봐주실 수 있을까요?

 

<query id="쿼리이름" action="select">
    <tables>
        <table name="document_categories" alias="cate" />
    </tables>
    <columns>
        <column name="cate.*" />
        <query id="getCategoryDocumentCount" alias="document_count">
            <tables>
                <table name="documents" alias="doc" />
            </tables>
            <columns>
                <column name="count(*)" alias="count" />
            </columns>
            <conditions>
                <condition operation="equal" column="doc.category_srl" default="cate.category_srl" />
                <query operation="in" column="doc.document_srl" pipe="and">
                    <tables>
                        <table name="document_extra_vars" alias="extra" />
                    </tables>
                    <columns>
                        <column name="extra.document_srl" />
                    </columns>
                    <conditions>
                        <condition operation="in" column="extra.module_srl" var="module_srl" notnull="notnull" pipe="and" />
                        <condition operation="in" column="extra.eid" var="var_ref" notnull="notnull" pipe="and" />
                        <condition operation="like_prefix" column="extra.value" var="var_ref_value" pipe="and" />
                    </conditions>
                </query>
            </conditions>
        </query>
    </columns>
    <conditions>
        <condition operation="equal" column="cate.module_srl" var="module_srl" filter="number" notnull="notnull" />
        <query operation="in" column="cate.category_srl" pipe="and">
            <tables>
                <table name="documents" alias="doc" />
            </tables>
            <columns>
                <column name="doc.category_srl" />
            </columns>
            <conditions>
                <query operation="in" column="doc.document_srl" pipe="and">
                    <tables>
                        <table name="document_extra_vars" alias="extra" />
                    </tables>
                    <columns>
                        <column name="extra.document_srl" />
                    </columns>
                    <conditions>
                        <condition operation="in" column="extra.module_srl" var="module_srl" notnull="notnull" pipe="and" />
                        <condition operation="in" column="extra.eid" var="var_ref" notnull="notnull" pipe="and" />
                        <condition operation="like_prefix" column="extra.value" var="var_ref_value" pipe="and" />
                    </conditions>
                </query>
            </conditions>
        </query>
    </conditions>
</query>

 

  • profile
    복잡하긴 진짜 복잡하네요.

    쿼리가 일단 condition에 해당되는 항목들은 대부분 index가 잡혀있어서 큰 문제는 없을 수 있으나 차라리 PHP에서 처리하는게 더 나을 수 있는 방식이 더 좋지 않을까 생각이 듣는데요..ㅎㅎ
    그리고 해당 글수가 많아지면 많아질수록 count 전체갯수를 가져오는 쿼리는 상상이상으로 느려집니다. 그건 각오하셔요.
  • profile profile
    뽑아야 하는 조건이 영 평범하질 않아서요ㅜ
    안 그래도 문서갯수 많아질수록 느려지는 느낌이에요;;;
  • profile profile
    카운트 하는 쿼리는 아무런 조건없이 게시글 가져오는 방식으로도 엉청 느립니다.