월간 추천수(voted_count)가 가장많은 순서대로 5개의 도큐먼트를 추출하되, 중복회원(member_srl)의 게시물은 1건만 추출하고자 아래와 같은 sql 문을 작성하였습니다.
select * FROM `xe_documents` as documents where module_srl in (154) and regdate like '$year$m%' group by member_srl order by voted_count desc limit 5;
의도한 대로 나오긴 했지만 중복회원(member_srl)이 있는경우 그사람의 게시물중 가장 추천수(voted_count)가 많은 게시물이 나오게 하고싶어서 아래와 같이 수정하였습니다.
select * FROM (select * from xe_documents as documents order by voted_count desc) group by member_srl where module_srl in (154) and regdate like '$year$m%' limit 5;
그러나 화면에 뿌려지는건 아무것도 없네요 ㅠ
어디가 잘못된건지요?
group by를 제외한 나머지 조건들은 서브쿼리 안으로 들어가야 할 것 같습니다만...
정확히 무슨 오류가 있는지는 DB에서 반환하는 에러메시지를 확인해 보세요. 최근 버전의 MySQL에서는 저런 식으로 SELECT * 하면서 특정 컬럼에만 group by를 넣는 것을 지원하지 않는 추세인데, 그것 때문일 수도 있습니다.
기존 쿼리를 건드리지 않고 좀더 쉽게 해결하는 방법으로는... 5개가 아니라 좀더 넉넉하게 받아온 후, 회원번호가 중복되는 것을 삭제하는 로직은 PHP단에서 구현하셔도 됩니다. 모든 것을 SQL로 구현할 필요는 없으니까요.