커뮤니티

CMS/프레임워크 Rhymix 2.1
개발 언어 PHP 8.4

안녕하세요.

 

1.jpg

위와 같이 게시판 리스트에서  "분류"를 상단탭 형식이 아니라 리스트 내에서 표시하고자 스킨을 수정하였고,

 

이를 정렬하는 기능을 추가하고 싶어 간단한 트리거용 애드온에서 xml을 작성하던 중 막히는 부분이 있어 질문글을 올립니다.

 

 

<query id="getDocumentListOrderbyCategories" action="select">

    <tables>

        <table name="documents" />

        <table name="document_categories" alias="cat_sort" />

    </tables>

    <columns distinct="distinct">

        <column name="documents.*" />

        <column name="cat_sort.title" alias="cat_title" />

    </columns>

    <conditions>

    중략

    </conditions>

    <navigation>

        <index default="cat_title" order="order_type" />

    후략

documents 와 document_categories 테이블은 각각 동일한 "title" column명이 있어 alias를 지정하고

 

위 쿼리를 실행할 때  Column not found: 1054 Unknown column 'cat_title' in 'order clause' (code -1) 에러가 나서 

 

order by 조건을 없애고 디버그 패널을 확인하던 중 

SELECT COUNT(*) AS `count` FROM (SELECT DISTINCT `documents`.*,  `cat_sort`.`title` AS `cat_title` FROM `rx_documents` AS `documents`,  `rx_document_categories` AS `cat_sort` WHERE `documents`.`document_srl` = `extra_vars`.`document_srl` AND  ~~~~~

Query ID: document.getDocumentListOrderbyCategories(count) 에서는 `cat_sort`.`title` AS `cat_title` 로 alias가  적용됐는데

 

SELECT DISTINCT `documents`.`document_srl`, `documents`.`module_srl`, `documents`.`category_srl`, `documents`.`lang_code`, `documents`.`is_notice`, `documents`.`title`, `documents`.`title_bold`, `documents`.`title_color`, `documents`.`member_srl`, `documents`.`nick_name`, `documents`.`tags`, `documents`.`extra_vars`, `documents`.`comment_count`, `documents`.`trackback_count`, `documents`.`uploaded_count`, `documents`.`status`, `documents`.`regdate`, `documents`.`last_update`, `documents`.`readed_count`, `documents`.`ipaddress` FROM `rx_documents` AS `documents`, `rx_document_categories` AS `cat_sort` WHERE  ~~~

Query ID: document.getDocumentListOrderbyCategories 에서는 위 column이 누락되는 것을 발견하였습니다.

 

<column name="cat_sort.title as cat_title" />  이렇게 직접 넣어보기도 하였는데 결과는 동일합니다. 

 

이런 경우 alias를 어떻게 지정할까요? 아니면 다른 방법이 있을까요? 

 

 

 

감사합니다.

ehii Lv. 2

댓글 2

  • 2025.06.01 18:00 #1908775

    게시판에서 글 목록을 불러올 때는 $columnList를 넘기게 되는데,

    그 목록에 cat_sort.title이 포함되어 있지 않아서 컬럼이 날아간 것 같습니다.

     

    $columnList를 넘기면서 alias 구조를 유지할 수 있는지는 의문입니다.

    사용자가 넘긴 값으로 <columns> 부분을 모두 대체해 버리기 때문입니다.

    alias 없이 ORDER BY cat_sort.title 하실 수는 있겠지요.

     

    솔직히 $columnList는 잘못 설계되었다고 생각하는 기능입니다.

    XML에 정의된 컬럼 중 일부를 제외하고 나머지를 그대로 두는 것도 아니고,

    정의하지 않은 컬럼을 추가할 수도 있으니 상당히 위험하지요.

  • 2025.06.01 19:57 #1908782

    저는 alias를 지정해서 뭔가 column이 누락되는 줄 알고 엉뚱하게 찾고 있었는데 질문이 잘못되었군요.

    알려주신 $columnList에 값을 추가하여 해결하였습니다.^^

    제 경우에는 SELECT COUNT(*) 의 서브쿼리 중복칼럼명오류에만 alias가 필요하기에, $columnList에 alias까지 넘길 필요는 없어서 간단하게 해결하습니다.

     

    주말 잘 보내세요!! 감사합니다.