CMS/프레임워크 | Rhymix 2.1 |
---|---|
개발 언어 | PHP 8.4 |
안녕하세요.
위와 같이 게시판 리스트에서 "분류"를 상단탭 형식이 아니라 리스트 내에서 표시하고자 스킨을 수정하였고,
이를 정렬하는 기능을 추가하고 싶어 간단한 트리거용 애드온에서 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를 어떻게 지정할까요? 아니면 다른 방법이 있을까요?
감사합니다.
댓글 2
게시판에서 글 목록을 불러올 때는 $columnList를 넘기게 되는데,
그 목록에 cat_sort.title이 포함되어 있지 않아서 컬럼이 날아간 것 같습니다.
$columnList를 넘기면서 alias 구조를 유지할 수 있는지는 의문입니다.
사용자가 넘긴 값으로 <columns> 부분을 모두 대체해 버리기 때문입니다.
alias 없이 ORDER BY cat_sort.title 하실 수는 있겠지요.
솔직히 $columnList는 잘못 설계되었다고 생각하는 기능입니다.
XML에 정의된 컬럼 중 일부를 제외하고 나머지를 그대로 두는 것도 아니고,
정의하지 않은 컬럼을 추가할 수도 있으니 상당히 위험하지요.
저는 alias를 지정해서 뭔가 column이 누락되는 줄 알고 엉뚱하게 찾고 있었는데 질문이 잘못되었군요.
알려주신 $columnList에 값을 추가하여 해결하였습니다.^^
제 경우에는 SELECT COUNT(*) 의 서브쿼리 중복칼럼명오류에만 alias가 필요하기에, $columnList에 alias까지 넘길 필요는 없어서 간단하게 해결하습니다.
주말 잘 보내세요!! 감사합니다.