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;
이런 형태가 떠오르는데, 아래 내용이 너무 어려워서 그부분은 이해를 못했습니다.