두 개의 sql을 공통된 값을 가진 것끼리 합치는 방법
본문
다음 두 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 ";
아래와 같은 결과값이 나오게 하려면 어떻게 해야할까요?
두 개의 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를 사용하여 같은 결과값은 중복처리를 방지하시는 방식으로 하시면됩니다.
크게 어려울꺼 없어보여집니다.