sql 테이블 행간 비교

sql 테이블 행간 비교

QA

sql 테이블 행간 비교

본문

특정 필드값을 순차적으로 다른 행의 같은 필드와 비교해 같은 값이 나오기 전까지

"같은 값이 없는 행의 갯수"를 구하려고 합니다.

 

A 라는 보드 테이블의 wr_1 과 wr_2 필드(숫자)를 100행만 호출해 펼쳐두었습니다.

100행 전체를 비교하지 않고 임의로 상위 50행 정도만 비교값을 출력할 의도입니다.

 

1행의 wr_1 값이 2행의 wr_1, wr_2 필드에 없으면 행별 필드별 치환되는 변수에 1값을 추가합니다.

1행의 wr_2 값이 2행의 wr_1, wr_2 필드에 없으면 행별 필드별 치환되는 변수에 1값을 추가합니다.

 

1행의 wr_1 값이 3행의 wr_1, wr_2 필드에 없으면 행별 필드별 치환되는 변수에 1값을 추가합니다.

1행의 wr_2 값이 3행의 wr_1, wr_2 필드에 없으면 행별 필드별 치환되는 변수에 1값을 추가합니다.

.

.

같은 값이 나올때까지..

다시

2행의 wr_1 값이 3행의 wr_1, wr_2 필드에 없으면 행별 필드별 치환되는 변수에 1값을 추가합니다.

2행의 wr_2 값이 3행의 wr_1, wr_2 필드에 없으면 행별 필드별 치환되는 변수에 1값을 추가합니다.

 

2행의 wr_1 값이 4행의 wr_1, wr_2 필드에 없으면 행별 필드별 치환되는 변수에 1값을 추가합니다.

2행의 wr_2 값이 4행의 wr_1, wr_2 필드에 없으면 행별 필드별 치환되는 변수에 1값을 추가합니다.

.

.

.

같은 값이 나올때까지..

 

만약 같은 값이 나오면 루프를 중단하고, 배열값을 모두 더해서 같은 값이 없던 행의 갯수를 구합니다.

같은 결과를 위한 다른 더 좋은 방법이 있을지도 궁금합니다. 제가 생각할 수 있는 한계에요.ㅎ;;

 

이것이 전체적인 그림이구요.

 

현재 아래와 같은 방식으로 시도를 해보고 있는데 정상적인 값이 도출되지 않아 도움을 구해봅니다^^;

 

우선 현재 사용중인 배열 변수들입니다.

$i = 100 행의 배열 변수.

${'numbers'.$i} = 각 행의 wr_1 과 wr_2 값을 담은 배열변수.

$h = wr_1, wr_2 필드 배열.

${'empty_row'.$i.$h}

$e = 각 행을 이전 행, 그리고 그 이전 행, 그 이전 행.......... 등 같은 값이 나올때까지 비교하려고 임의로 반복비교할 횟수 값 배열.(아무래도 이 부분에서 뭔가 꼬인듯한 기분이 드네요.)

 

그리고 코드 구조는 아래와 같은 형식으로 짜여져 있습니다.

각 행과 필드별로 숫자는 출력되는데 규칙적이거나 비정상적인 값들이 나오네요.;


<?php
    // 중략
    for($i=0; $row=sql_fetch_array($result); $i++) {
        ${'numbers'.$i} = array($row['wr_1'], $row['wr_2']);
        for($h=1; $h <= 2; $h++) {
            ${'empty_row'.$i.$h} = array();
                for($e=0; $e < 50; $e++) {
                    if(
                        $row['wr_'.$h] != ${'numbers'.($e)}[0] &&
                        $row['wr_'.$h] != ${'numbers'.($e)}[1] 
                    ) {
                        array_push(${'empty_row'.$i.$h},1); // 비교값이 없으면 1추가
                    } else {
                        break; // 있으면 비교 중지?  사용법이 맞는지 모르겠네요.
                    }
                } // end for $e
                ${'sum'.$i.$h} = array_sum(${'empty_row'.$i.$h}); // 배열에 담긴 1값을 합산(타겟 값이 없는 행 갯수)
?>
<td><?php echo ${'sum'.$i.$h}; ?></td>
<?php } ?>
<?php } ?>

이 질문에 댓글 쓰기 :

답변 1

내용이 너무 어렵습니다

일단 3중포문 로직이 들어가있는데, 굉장히 위험한 로직입니다.

 

제가 이해해보려고 몇번 글을 읽어봤는데, 이해가 잘 되지않습니다.

실제 어려운 로직일수도 있겠지만,  작성자님이 어렵게 문제를 풀어가려는게 아닌가 생각해봅니다.

 

특정 필드값을 순차적으로 다른 행의 같은 필드와 비교해 같은 값이 나오기 전까지

"같은 값이 없는 행의 갯수"를 구하려고 합니다."

 

위 내용만보고는

 

$arr = array('a','b','c','d','e');
$arr2 = array('c','y','h','o','e');

$count = count($arr);
 for($i=0; $i<count($arr); $i++) {

  for($k=0; $k<count($arr2); $k++) {
   if( $arr[$i] == $arr2[$k]) $count--;
  }
 }

 echo "==>".$count;

 

이런 형태가 떠오르는데, 아래 내용이 너무 어려워서  그부분은 이해를 못했습니다.

 

 

 

귀한 시간 내주셔서 감사합니다.
최대한 간단하게 설명드리자면 찾고자 하는 값이 최근 몇 행을  연속으로 없다가 다시금 등장했는가 입니다. 과거 행을 거슬러 비교하면서 찾고자 하는 값과 일치하지 않는 행의 갯수를 구하고 일치하는 값이등장하면 루프 수행을 중지하고요.
혹시 구현페이지 참고가 필요하시면 퇴근후 저녁때 링크 남겨드리겠습니다. 관리자만 해당 값을 볼수있게 해놔서 수정을 해야하네요. ^^;

참고가 되실지 모르겠지만 혹시 페이지 살펴보실 의향있으시다면 댓글 남겨주실 때
링크 다시 남겨드릴께요. 바쁘셔서 여의치 않으실 수도 있으니 일방적으로 링크 남겨드리고
기다리는건 실례될거 같아요.

답변을 작성하시기 전에 로그인 해주세요.
전체 728
QA 내용 검색
filter #sql ×

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT