질문/조언질답게시판
Extra Form
PHP PHP 7.2
CMS Rhymix 1.x

<query id="getMemberRank" action="select">
    <tables>
        <table name="member_follow"/>
        <table name="member" type="left join">
         <conditions>
             <condition operation="equal" column="member_follow.target_srl" default="member.member_srl" notnull="notnull" pipe="and"/>
        </conditions>
        </table>
    </tables>
    <columns>
        <column name="member_follow.target_srl" alias="target_srl" />
        <column name="member.nick_name" alias="target_nick_name" />
        <column name="member.user_id" alias="user_id" />
        <column name="member.regdate" alias="regdate" />
        <column name="member.last_login" alias="last_login" />
        <column name="count(member_follow.target_srl)" alias="cnt"/>
    </columns>
    <conditions>
        <condition operation="more" column="member_follow.regdate" var="limit_date" />
        <condition operation="notin" column="member_follow.target_srl" var="ban_srl" pipe="and" />
        <condition operation="notnull" column="member.member_srl" pipe="and" />
    </conditions>
    <groups>
        <group column="member_follow.target_srl" />
    </groups>

    <navigation>
        <index var="sort_index" default="cnt" order="desc" />
        <list_count var="list_count" default="5" />
        <page_count var="page_count" default="5" />
        <page var="page" default="1" />
    </navigation>
</query>

 

 

위와 같은 쿼리가 있습니다. 

 

 

현재 휴면회원으로 인한 문제가 발생하고 있는데요. 현재 붉은색으로 표시해 드린 부분인 member_follow.target_srl 이 회원번호가 멤버테이블에 회원번호와 일치하는지 확인해서 일치(존재?) 한다면 포함시키는 조건이 걸려있는 듯 합니다.

 

 

그런데 문제가 되는 부분은 파란색으로 표시해 드린 부분입니다.

<column name="count(member_follow.target_srl)" alias="cnt"/>

 

순위를 산정하기위한 member_follow.target_srl 를 카운트 하고 있는데요. 여기서 제외되어야할 대상이 있습니다.

member_follow 테이블에 member_srl 의 칼럼도 있는데 이 회원번호 중 "휴면회원" 은 제외를 하고 카운트를 해야 합니다. 그러니까 member_follow.member_srl 도 회원테이블에 있는 회원번호만 참조가 되어서 목록에 반영되어야 하는 상황인데 이게 빠져 있어서 문제가 됩니다.

 

 

 

    <tables>
        <table name="member_follow"/>
        <table name="member" type="left join">
         <conditions>
             <condition operation="equal" column="member_follow.target_srl" default="member.member_srl" notnull="notnull" pipe="and"/>

       <condition operation="equal" column="member_follow.member_srl" default="member.member_srl" notnull="notnull" pipe="and"/>
        </conditions>
        </table>
    </tables>

 

위와 같이 파란색 부분을 추가해 야 하는 것인지아니면 다른 조치가 필요한건지 궁금합니다.

 

 

 

 

그런데 실제 쿼리는 위 쿼리파일을 이용하지 않고 php에 작성되어 있습니다.

 

$wdmf_sql = "SELECT member_follow.target_srl as target_srl, member.nick_name as target_nick_name, member.user_id as user_id, member.regdate as regdate, member.last_login as last_login, count(member_follow.target_srl) as cnt FROM ".$am_db_prefix."member_follow as member_follow left join ".$am_db_prefix."member as member on member_follow.target_srl = member.member_srl WHERE 1 AND member.member_srl IS NOT NULL ".$login_target_sql.$ban_sql.$date_sql." GROUP BY member_follow.target_srl ".$having_sql." ORDER BY ".$order_sql." LIMIT 0, ".$wargs->list_count;

 

현재 작성되어 있는 것은 굵게 표시한 부분인 것 같습니다. 추가를 해야 한다면 이 php 파일에 추가를 해야 하는 상황입니다.