포럼
executeQuery의 버그
2012.04.21 20:01
executeQuery를 사용하면 total_count, total_page, page, list_count 등을 쉽게 관리할 수 있는 굉장한 장점이 있습니다.
그중 total_count 는 같은쿼리를 컬럼을 count(*)로 변경하여 다시한번 재 실행 해주죠.
그런데, member함수에 포함된 getMemberWithinGroup.xml을 살펴보면 group by 절이 포함되어 있습니다.
group by절이 포함된상태에서 count(*)를 사용하면 다음과같은 결과가 나옵니다.
당연하지요. member_srl로 group_by 를 했으니까요.
관리자모드에서 그룹검색을하면 총 회원수가 1로 나옵니다.
이 문제는 같은쿼리를 서브쿼리로 한번 포장을 해준다면 가능합니다.
select count(*) from ( getMemberWithinGroup.xml ) as table
과 같은 형태로 말이죠
그럼 다음과같은 결과가나옵니다.
큰문제는 아니지만, XE를 베이스로 개발하는 모듈개발자 입장에선 꽤나 난해한 문제입니다.
모든쿼리를 서브쿼리화 하여야 하니까요... 1.5에선 그나마 xml 서브쿼리가 지원되서 다행이지만 예전같았으면...
executeQuery 를 포기해야합니다.
다른분들은 어떻게 생각하시나요?
- googleCode에 업로드함이 마땅하다 생각하나, 다른유저분들은 잘안보시는 것 같아 이곳에 올려둡니다.
댓글 7
-
Xiso
2012.04.21 20:03
-
카르마
2012.04.21 20:45
비슷한 문제로 이슈를 등록했는데 아직 반응이 없네요.
http://code.google.com/p/xe-core/issues/detail?id=1891&sort=-id
debugPrint로 찍어보니까 첫페이지는
[_query] => SELECT max(`comments`.`comment_srl`) as `comment_srl`, `comments`.`member_srl` as `member_srl`, count(`files`.`file_srl`) as `count`, max(`comments`.`regdate`) as `regdate` FROM `xe_files` as `files` , `xe_comments` as `comments` WHERE ( `files`.`upload_target_srl` = `comments`.`comment_srl` and `comments`.`module_srl` in (283,293535,289,23245,23249,23246,289549,23248,234,285,23247,23243,23244) ) and `comments`.`list_order` <= 2100000000 GROUP BY `comments`.`member_srl` ORDER BY `comments`.`list_order` asc LIMIT 0, 20
로 찍히지만
두번째 페이지는
[_query] => select count(*) as "count" from (select count(*) as "count" FROM `xe_files` as `files` , `xe_comments` as `comments` WHERE `files`.`upload_target_srl` = `comments`.`comment_srl` and `comments`.`module_srl` in (283,293535,289,23245,23249,23246,289549,23248,234,285,23247,23243,23244)) xet
로 찍히더군요.
우선은 급한데로
$oDB->_query($sql)로 해결을 했지만 group by 쿼리에 문제가 있는 것은 분명해보입니다.
참 방금 이슈등록했는데
회원목록의 검색에도 에러가 발생하네요...
이것도 비슷한 증상 인 것이 group 쿼리문제가 아닐까 추측됩니다.
http://code.google.com/p/xe-core/issues/detail?id=1934&thanks=1934&ts=1335008630
-
라르게덴
2012.04.21 22:16
페이징 관련한 디버깅은 아래의 원인일 수도 있습니다.
http://code.google.com/p/xe-core/issues/detail?id=1622
그리고 group by와 distinct()의 처리 시에 문제가 있는게, 요 전번에 대량으로 루마니아측에서 DB관련 업그레이드가 이루워진 후 그러는거 같습니다만...
-
Xiso
2012.04.22 02:35
임시방편으로 group_by가 포함된 쿼리를 서브쿼리로 작성하여 문제를 해결하려고 네시간동안 엉망인 메뉴얼과 싸웠으나, from절의 서브쿼리 사용법을 찾지못하고 본체를 수정하였습니다.
다음과같이 수정하여 현재의 문제를 모두 수정하였습니다.
-
난다날아
2012.04.24 13:57
tests/classes/db/db/xml_query/
디렉터리 안에 테스트용 쿼리를 참고해 보세요.
-
Xiso
2012.05.03 22:03
test 디렉터리가 없습니다 ㅠ
-
난다날아
2012.05.07 09:57
http://xe-core.googlecode.com/svn/branches/1.5.0/tests 여길 한번 보세요.
아, 추가로 말씀드리자면 이것은 당연히 page_count 등에도 영향을 미칩니다.
총 데이터수만 문제가 아니라, 페이징이 안되게 되버립니다..