질문/조언질답게시판

<condition operation="equal" column="documents.member_srl" default="member_follow.target_srl" pipe="and" />

 

문서테이블의 글을 가져오는 쿼리에 원래는 회원번호를 가져오는 것은 없었습니다.

 

그런데 회원구독테이블의 존재하는 회원번호에 해당하는 새글만 가져오게 join을 시도해 보려고 하는데 

 

target_srl 을 처리하는게 문제입니다.

 

회원구독테이블에 srl이 두개입니다. member_srl,target_srl 

 

member_srl 의 target_srl  회원번호에 해당하는 회원들의 글만 가져오려고 처리하려고 하는 것인데요.

 

이렇게 되면 

php에서  로그인한 회원의 회원번호를 한번 담고 

회원구독테이블에서 member_srl을 이 담아 놓은 회원번호 라고 알려주고 이 회원번호를 가진 회원의 target_srl 로 매칭을 해야 하는데 잘 떠오르지 않네요.

 

 

 

 

  • profile

    로그인한 회원번호를 담아 놓은 것으로 회원구독테이블에서 참조하게 이렇게 한줄 더 넣으면 될까요??

    <condition operation="equal" column="member_follow.member_srl" default="member_srl" pipe="and" />

     

    <---  요것들의 traget_srl 이 실제 문서테이블에서 참조해야할 회원번호가 되거든요.

  • profile

    <query id="getNewestDocuments" action="select">
        <tables>
            <table name="documents" />
            <table name="member_follow" type="left join" />
            <conditions>
                 <condition operation="equal" column="member_follow.member_srl" default="member_srl" notnull="notnull" pipe="and"/>
            </conditions>
        </tables>

        <columns>
            <column name="documents.*" />
        </columns>
        <conditions>
            <condition operation="notin" column="documents.module_srl" default="0" pipe="and" />
            <condition operation="in" column="documents.module_srl" var="module_srl" filter="number" notnull="notnull" pipe="and" />
            <condition operation="in" column="documents.category_srl" var="category_srl" pipe="and" />
            <condition operation="notequal" column="status" default="TEMP" pipe="and" />
            <condition operation="equal" column="documents.member_srl" default="member_follow.target_srl" pipe="and" /> 
            <group pipe="and">
                <condition operation="more" column="documents.last_update" var="duration_article" pipe="and" />
            </group>
        </conditions>
        <navigation>
            <index var="sort_index" default="documents.list_order" order="order_type" />
            <list_count var="list_count" default="50" />
            <page_count var="page_count" default="10" />
            <page var="page" default="1" />
        </navigation>
    </query>

     

     

    이건 어떤가요???  붉은색은 추가 한건데요...

  • profile
    target_srl 은 어디 포지션에 따르냐에 따라 값이 다다릅니다.

    그러니깐 member_srl이 될수도 있고 module_srl 이될수도 있고 document_srl 이 될수있습니다.

    즉, default값에 넣어둔 member_follow.target_srl 이라는 단어에서 target_srl 은 존재 하지 않는 것입니다.

    member_srl 으로 바꿔보세요.

    member_follow.member_srl
  • profile profile
    target_srl 은 member_follow 가 가지고 있습니다. 다만 member_srl 이 가지는 구조입니다.

    member_srl 은 로그인 한 회원이어야 하고 이 로그인한 회원번호가 member_follow의 member_srl 이 되어야 합니다.

    그러니까 일단 이 로그인한 회원의 member_follow의 member_srl 만 뽑아야 합니다.
    그리고 이 뽑힌 결과에서 target_srl이 로그인한 회원이 구독한 회원들의 회원번호입니다.

    최종적으로는 target_srl 의 회원번호를 가진 문서테이블의 문서만 가져오려는 것 입니다.
  • profile profile
    그럼 첫번째 수정한 내용에서 condition에 들어가야 할 내용은 저 내용이 아니라

    <condition operation="in" column="documents.member_srl" default="member_follow.target_srl" notnull="notnull" pipe="and"/>

    으로 바꾸셔야할 것 같습니다.
  • profile profile
    마지막에 수정한 것도 operation 값은 in 이여야 할 것 같기도...
  • profile profile
    equal 로 하면 완전 다른 결과가 나오나요??? 팔로워의 회원번호와 글작성자의 회원번호가 일치한다고 생각하고 추측성으로 적어본거라서 ... 제대로 배운게 아니니 엉뚱한 질문일 수도 있습니다.
  • profile
    첫번째 추가한 conditions 그룹은 아에 지워버리고,

    아래줄에 operation 만 in 값으로 바꿔보세요.

    그렇게 해버리면, 해당 구독한 회원들의 게시글들의 집합이 될 수도..
  • profile profile
    그럼 다시 제가 재질문드릴께요.

    target_srl 이 어떤 데이터가 들어가는 것인지 확실히 아시나요?

    제가 그 데이터가 어떤 데이터가 들어가는지 이해가 안가서요..

    질문의 내용처럼.. 팔로잉한 사람들의 게시글을 가져오고 싶으신건가요?

    처음에 대충 target_srl 을 들었을때는
    member_srl 이 여러개 들어간듯한 일종의

    111,2342,31414,

    이런형태의 데이터로 보여져서 in으로 해야한다고 생각했는데, 현재 보면 그런것도 아닌 듯 합니다.

    이럴경우 첫줄에서는..

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

    에서 default 값이 정확하게 들어가야할 것 같고요..

    또 두번째 수정에서 언급된 부분이 target_srl 값으로만 검사하고 잇는데 target_srl 값을 쓰는게 아닌 것 같아요.

    PHP단위에서 target_srl (내가 팔로잉한 목록) 리스트를 처음부터 다 불러와서 배열에 담아두고, 그 담아둔 배열을 쿼리에 집어넣은 다음

    두번째에는

    $args = new s~~~
    $args->target_srls = '111,1234,23423';

    <condition operation="in" column="documents.member_srl" var="target_srls" pipe="and" />

    형태로 해야할 것 같아요.

    하나의 쿼리에서 처리 불가능할 것같고, left join 도 안될 것 같습니다.

    그냥 따로 내가 팔로잉하는 리스트 긁고-> 배열 정리-> 그 배열정리한 값을 위처럼.. 다시 쿼리를 가져오는 방법이 될것 같습니다..
  • profile profile
    회원구독 모듈 member_follow 테이블에 기록되는 값들은

    member_srl : 구독을 한 사람 / target_srl : 피구독자 / 나머지 부가 정보....

    이렇게 내가 누군가 구독할때 기록이 됩니다.

    바로 내가 member_srl 이고 상대가 target_srl 이 됩니다.
  • profile profile
    그러니까! target_srl 이 대상자 이라는거죠.

    그래서 equal 으로 target_srl 으로 하면 첫번째 쿼리에서 잇었던 target_srl 정보만 가지고 오게될 것 같아요. (한사람의 쿼리..)

    그래서 여러사람의 데이터를 가져올려면 두번의 쿼리가 필요할 것 같아요 :)
  • profile profile
    회원구독테이블의 traget_srl 이 있는경우 참조가 되어 제가 팔로우 하지 않은 회원의 글도 함께 나오고 반복해서 나오는 문제 그리고 처음 윗쪽의 조건은 먹지도 않는 등 전혀 의도와 거리가 먼 그런 결과가 나오니 좀더 공부를 한 후 나중에 다시 시도를 해봐야겠네요...
  • profile profile
    알려주신 내용을 가지고 기존 위젯의 코드를 계속 살펴보니
    우선 내가 팔로우 하고 있는 명단을 쿼리해서 회원번호로 배열에 담아서
    이후 아래 진행되는 코드에서 문서작성자 회원번호가 내가 담아 놓은 배열에 있는지 여부를 비교해서 진행하는 것으로 구성했더니 성공한 것 같습니다.

    감사합니다.
    기존 위젯과 스킨을 그대로 이용하면서 내가 구독하고 있는 회원의 새글을 출력해 보려고 하는데 구독자가 없는 경우 등을 고려해서 좀더 테스트 해봐야겠습니다.

    감사합니다.
  • profile profile
    성공하셧다니 다행이네요 :)
  • profile
    그리고첫번째 수정 빨간색 친 곳에서

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

    을 가져오게 되어있는데 default 라는 기본값이 member_srl 을 참조하는 것이 아니라 문자의 member_srl 이라고 인식할 수 있습니다...

    이 경우 어디에서 가져올 내용인지 정확하게 지정해줘야할 필요가 있습니다.

    왜냐하면 어느정보의 회원인지 모르는거거든요.

    그리고 저기에 default 옵션은 적절하지 않고 쿼리날릴때 var= 옵션에 지정한 값에 따라 지정하는 편이 더 나을것 같습니다..


    <condition operation="equal" column="member_follow.member_srl" var="target_member_srl" notnull="notnull" pipe="and"/>

    $args = new stdClass;
    $args->target_member_srl = '~~~';
    $args->~~~~

    $output = executeQuery('~~~.getNewestDocuments', $args);
  • profile profile

    처음 빨간색 부분 member_srl 은 php에서 먼저 처리할 생각입니다.