<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 로 매칭을 해야 하는데 잘 떠오르지 않네요.
댓글 16
로그인한 회원번호를 담아 놓은 것으로 회원구독테이블에서 참조하게 이렇게 한줄 더 넣으면 될까요??
<condition operation="equal" column="member_follow.member_srl" default="member_srl" pipe="and" />
<--- 요것들의 traget_srl 이 실제 문서테이블에서 참조해야할 회원번호가 되거든요.
<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>
이건 어떤가요??? 붉은색은 추가 한건데요...
그러니깐 member_srl이 될수도 있고 module_srl 이될수도 있고 document_srl 이 될수있습니다.
즉, default값에 넣어둔 member_follow.target_srl 이라는 단어에서 target_srl 은 존재 하지 않는 것입니다.
member_srl 으로 바꿔보세요.
member_follow.member_srl
member_srl 은 로그인 한 회원이어야 하고 이 로그인한 회원번호가 member_follow의 member_srl 이 되어야 합니다.
그러니까 일단 이 로그인한 회원의 member_follow의 member_srl 만 뽑아야 합니다.
그리고 이 뽑힌 결과에서 target_srl이 로그인한 회원이 구독한 회원들의 회원번호입니다.
최종적으로는 target_srl 의 회원번호를 가진 문서테이블의 문서만 가져오려는 것 입니다.
<condition operation="in" column="documents.member_srl" default="member_follow.target_srl" notnull="notnull" pipe="and"/>
으로 바꾸셔야할 것 같습니다.
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 도 안될 것 같습니다.
그냥 따로 내가 팔로잉하는 리스트 긁고-> 배열 정리-> 그 배열정리한 값을 위처럼.. 다시 쿼리를 가져오는 방법이 될것 같습니다..
member_srl : 구독을 한 사람 / target_srl : 피구독자 / 나머지 부가 정보....
이렇게 내가 누군가 구독할때 기록이 됩니다.
바로 내가 member_srl 이고 상대가 target_srl 이 됩니다.
그래서 equal 으로 target_srl 으로 하면 첫번째 쿼리에서 잇었던 target_srl 정보만 가지고 오게될 것 같아요. (한사람의 쿼리..)
그래서 여러사람의 데이터를 가져올려면 두번의 쿼리가 필요할 것 같아요 :)
우선 내가 팔로우 하고 있는 명단을 쿼리해서 회원번호로 배열에 담아서
이후 아래 진행되는 코드에서 문서작성자 회원번호가 내가 담아 놓은 배열에 있는지 여부를 비교해서 진행하는 것으로 구성했더니 성공한 것 같습니다.
감사합니다.
기존 위젯과 스킨을 그대로 이용하면서 내가 구독하고 있는 회원의 새글을 출력해 보려고 하는데 구독자가 없는 경우 등을 고려해서 좀더 테스트 해봐야겠습니다.
감사합니다.
아래줄에 operation 만 in 값으로 바꿔보세요.
그렇게 해버리면, 해당 구독한 회원들의 게시글들의 집합이 될 수도..
<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);
처음 빨간색 부분 member_srl 은 php에서 먼저 처리할 생각입니다.