두 개의 sql을 공통된 값을 가진 것끼리 합치는 방법

두 개의 sql을 공통된 값을 가진 것끼리 합치는 방법

QA

두 개의 sql을 공통된 값을 가진 것끼리 합치는 방법

답변 5

본문

다음 두 sql을 활용해서

 

$sql = " select * from $write_table where wr_parent = '$wr_id' and wr_is_comment = 1 and wr_comment_reply = '' order by wr_good desc ";

 

$sql = " select * from $write_table where wr_parent = '$wr_id' and wr_is_comment = 1 and wr_comment_reply != '' order by wr_comment_reply asc ";

 

아래와 같은 결과값이 나오게 하려면 어떻게 해야할까요?

 

3034923468_1720390169.043.png

 

두 개의 sql에서 나온 값을 wr_comment 값이 같은 것끼리 묶어주고 싶은데 힌트라도 좀 주실 수 있을까요? ㅠㅠ

이 질문에 댓글 쓰기 :

답변 5


$sql = " 
SELECT 
     c.wr_id,c.wr_parent,c.wr_comment,c.wr_comment_reply,c.wr_good,c.wr_content,c.mb_id
FROM 
    {$write_table} a 
    INNER JOIN 
    {$write_table} b ON b.wr_parent = a.wr_id AND b.wr_is_comment = 1 AND b.wr_comment_reply = '' 
    INNER JOIN 
    {$write_table} c ON c.wr_num = b.wr_num AND c.wr_is_comment = 1 AND c.wr_comment = b.wr_comment  
WHERE 
    a.wr_id = {$wr_id}
ORDER BY 
     b.wr_good DESC
    ,c.wr_comment_reply ASC
";

질문을 다시 보니 오히려 쿼리로 해결하시기보다는 결과(배열)을 php 로 가공해서

원하는 결과를 만드시는 게 낳을 것 같습니다.

wr_commnet 를 비교해 가며 값이 달라지면 배열에 로우를 추가하는 방식으로요.

 

두 데이터를 묶을 때는  UNION ALL 을 씁니다.

아래처럼요..

 

SELECT * FROM (

    select * from $write_table where wr_parent = '$wr_id' and wr_is_comment = 1 and wr_comment_reply = ''
    UNION ALL
    select * from $write_table where wr_parent = '$wr_id' and wr_is_comment = 1 and wr_comment_reply != ''

) ORDER 컬럼  asc

 

조건이랑 정렬은 조정해야 할 거고요..

 

참고하세요==>  https://silverji.tistory.com/49

같은 테이블의 데이터를 위와같이 출력해야 하는경우

order by 와 group by 를 적절히 사용하시면 원하시는 출력결과가 가능합니다.

UNION 을 사용하시구  SELECT 에서 DISTINCT를 사용하여 같은 결과값은 중복처리를 방지하시는 방식으로 하시면됩니다.

 

크게 어려울꺼 없어보여집니다. 

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
filter #join ×
전체 33
© SIRSOFT
현재 페이지 제일 처음으로