XML쿼리시 alfredo 2021.12.08 04:51 553 0 10 CMS/프레임워크 Rhymix 2.0 개발 언어 PHP 7.4 기존 mysql 쿼리에서 사용하는 MAX, MIN을 대체하는 방법은 뭘까요? 아무리 검색해봐도 찾을수가 없네요. alfredo Lv. 3
댓글 10
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>
그게,,, left_join으로 가져오는 것들 중 가장 큰 값 하나만 필요해서요..
제가 자세하게 글을 올리지 않았네요. 죄송합니다.
https://github.com/rhymix/rhymix/blob/master/modules/document/queries/getDocumentListWithinExtraVars.xml
left조인으로 만들어지는건 아니지만 이런것처럼 order 타입자체를 특정 테이블의 칼럼에 지정할 수 있으므로 해당 방식대로 한다면 가능하지 않을까 생각이 듭니다.
이런식으로 칼럼에 min max 함수를 추가하여 사용할 수도 있습니다.
<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쿼리를 작성해야 하는지 알수가 없어서요.
마지막 게시물 1개를 가져오는데 MAX, MIN이 왜 필요하지요? module_srl로 검색하고 regdate 역순으로 정렬해서 맨 처음 1개만 가져오면 되는 것 아닌가요? 굳이 여러 테이블을 join할 필요가 없어 보입니다.
그것과는 별도로, SQL에서 특정 조건을 만족하는 마지막 레코드에 해당하는 다른 무언가를 가져올 때는 대개 left join이 아닌 서브쿼리를 사용합니다.
한두개 겹치는건 되는데 서너개 겹치게 하는건 능력밖인것 같습니다.
그냥 별도로 처리했습니다. 답변 감사합니다