XML쿼리시

Extra Form
PHP PHP 7.4
CMS Rhymix 2.x

기존 mysql 쿼리에서 사용하는 MAX, MIN을 대체하는 방법은 뭘까요?
아무리 검색해봐도 찾을수가 없네요.

  • profile

    order_type 을 바꿔주시면 될것 같습니다.

    max 나 min은 일반적으로 최대치 최소치하나만을 가져오는 것이니, 그걸 응용해서

    특정 쿼리를 order 타입을 어떤 숫자의 칼럼에 연결하여 asc(?) 또는 desc(?) 으로 잡아주시면 max min 값 순서대로 넘어오기 때문에 $output->data[0] 은 항상 최대치 혹은 최소치가 나올 수 있겠습니다.

     

    e.g)

     

    <navigation>

    <index var="sort_index" default="list_order" order="order_type" />

    <list_count var="list_count" default="1" />

    </navigation>

  • profile profile
    아,, order_type으로 뽑는건 이해하고 있습니다만
    그게,,, left_join으로 가져오는 것들 중 가장 큰 값 하나만 필요해서요..
    제가 자세하게 글을 올리지 않았네요. 죄송합니다.
  • profile profile
    그것도 아마 조인으로 가져오는 칼럼을 지정할 수 있어요.

    https://github.com/rhymix/rhymix/blob/master/modules/document/queries/getDocumentListWithinExtraVars.xml

    left조인으로 만들어지는건 아니지만 이런것처럼 order 타입자체를 특정 테이블의 칼럼에 지정할 수 있으므로 해당 방식대로 한다면 가능하지 않을까 생각이 듭니다.
  • profile profile
    네에, 감사합니다. 한번 해보겠습니다.
  • profile profile
    https://github.com/xpressengine/xe-module-profiler/blob/master/queries/getStatisticSlowlog.xml

    이런식으로 칼럼에 min max 함수를 추가하여 사용할 수도 있습니다.
  • profile profile
    ^^ 잘 안되네요...

    <query id="getModuleSrlByMenuSrl" action="select">
    <tables>
    <table name="modules" alias="modules" />
    <table name="menu_item" alias="menu_item" type="left join">
    <conditions>
    <condition operation="equal" column="menu_item.url" default="modules.mid" />
    </conditions>
    </table>
    <table name="documents" alias="documents" type="left join">
    <conditions>
    <condition operation="equal" column="documents.module_srl" default="modules.module_srl" />
    </conditions>
    </table>
    </tables>
    <columns>
    <column name="modules.module_srl" />
    <column name="modules.mid" />
    <column name="modules.browser_title" />
    <column name="menu_item.expand" />
    <column name="documents.title" />
    </columns>
    <conditions>
    <condition operation="equal" column="modules.menu_srl" var="menu_srl" />
    <condition operation="equal" column="modules.module" var="module" pipe="and" />
    <condition operation="equal" column="modules.site_srl" var="site_srl" pipe="and" />
    </conditions>
    </query>


    현재 이 상태인데.. 모듈에 해당하는 document전체에서 가장 마지막 게시물 날짜 한개만 가져오고 싶은데 어렵네요
    자체내에서 해결이 가능한지.. 아니면 별도로 다시 xml쿼리를 작성해야 하는지 알수가 없어서요.
  • profile

    마지막 게시물 1개를 가져오는데 MAX, MIN이 왜 필요하지요? module_srl로 검색하고 regdate 역순으로 정렬해서 맨 처음 1개만 가져오면 되는 것 아닌가요? 굳이 여러 테이블을 join할 필요가 없어 보입니다.

    그것과는 별도로, SQL에서 특정 조건을 만족하는 마지막 레코드에 해당하는 다른 무언가를 가져올 때는 대개 left join이 아닌 서브쿼리를 사용합니다.

  • profile profile
    아,, 서브쿼리 끼워넣어서 해보도록 하겠습니다. 감사합니다.
  • profile profile
    단, 쿼리 속도는 안드로메다로 갑니다. ㅎㅎ
  • profile profile
    서브쿼리 중간에 끼워서 값 뽑아내기가 쉽지 않네요.
    한두개 겹치는건 되는데 서너개 겹치게 하는건 능력밖인것 같습니다.
    그냥 별도로 처리했습니다. 답변 감사합니다