다시 질문 드려봅니다. 조건에 맞는 배열 값의 개수 구하기..

다시 질문 드려봅니다. 조건에 맞는 배열 값의 개수 구하기..

QA

다시 질문 드려봅니다. 조건에 맞는 배열 값의 개수 구하기..

본문

먼저 비슷한 질문을 또 드리게 되서 죄송합니다.

 

어제 이곳에 '조건에 맞는 배열 값의 개수 구하기'라는 질문을 드렸었습니다.

제가 생각해도 질문이 많이 허접했습니다.

 

스스로도 정리가 되지않은 상태에서 질문을 드리다보니 핵심을 벗어난 질문이 되었습니다.

그래서 오늘 나름 정리를 해봤습니다. 내가 정말 구하고자 하는 것들이 무엇인지를요...

 

배열이라는 것을 처음 사용하다보니 많이 헷갈립니다만 다시 한 번 정신줄 잡고 질문 드려봅니다.

 

제가 지금까지 이곳의 많은 분들의 도움을 받아 작업한 내용들입니다.

 

$bo_table = aaa (교육강좌 개설 게시판)
  - 교육회차별 강좌수 유동적 (최소 1개 ~ 최대 20강좌 개설)
  - aaa게시판에 저장된 교육회차별 강좌수는 $wr_2의 값은 교육신청시 bbb게시판의 $wr_2에도 저장
  - aaa게시판 $wr_2의 값만큼 개설된 강좌수 만큼 $wr_3에 온라인 교육(=1) 인지 오프라인 교육(=2)인지 저장
  - $wr_2 배열개수에 따라 생성된 강좌가 온라인 교육인지 오프라인 교육인지의 값들이 $wr_3에 저장

 

$bo_table = bbb (aaa게시판에서 개설된 교육에 대한 각 강좌별 교육 신청게시판)
  - bbb게시판 $wr_2 저장된 강좌수가 write.skin.php에서 for 문을 통해 리스트업 되고 각각의 강좌별 교육신청(check)이 되도록 하고 있음
  - 각 강좌별 신청(강좌별 체크된 값)은 bbb게시판 $wr_3에 배열변수로 입력되어 있음

 

아래는 bbb게시판에서 교육신청을 하고난 이후 보여지는 view.skin.php 페이지 소스입니다.

 

제가 알고 싶은 것은 아래 소스 하단에 있는 홍길동이라는 사람이 bbb게시판에서 신청한 여러개의 강좌 중 온라인강좌가 몇 개인지, 오프라인강좌가 몇 개인지입니다.

 


<table>
    <tr>
        <td>교육일</td>
        <td>강의명</td>
        <td>운영</td>
        <td>교육비</td>
        <td>납부마감일</td>
        <td>신청여부</td>
    </tr>
    <?php for ($i = 0; $i < $view['wr_2']; $i++) { 
        $wr3_check = explode(",", $view['wr_3']);    
        $wr3_tot = array_count_values($wr3_check); // 신청한 강좌수
        $wr_3k = explode(',', $aaa['wr_3']); // aaa게시판의 $wr_3 배열값, 온라인강좌인지 오프라인 강좌인지
    ?>
    <tr>
        <td><?php echo date("y.m.d", strtotime($wr_bosu['c1_no'.$i.''])); ?></td><!-- 교육일 -->
        <td><?php echo $wr_bosu['c5_no'.$i.'']; ?>    </td><!-- 강의명 -->
        <td><?php echo ($wr_3k[$i]=="1") ? '온라인강좌' : '오프라인강좌'; ?></td><!-- 강의운영 : 온라인 or 오프라인 -->
        <td><?php echo $aaa['wr_5']; ?></td> <!-- 교육비 : 1개 강좌당 강의비 aaa게시판 $wr_5에 저장된 값은 불러옴 -->
        <td><?php echo (in_array($i, $wr3_check) != '') ? date("y.m.d", strtotime($wr_bosu['c8_no'.$i.''])) : '' ?></td><!-- 교육비 납부 마감일 -->
        <td><?php echo (in_array($i, $wr3_check) != '') ? '신청' : '미신청' ?></td><!-- 해당 강좌 교육신청 여부 표시 -->
    </tr>
    <?php } ?>
    <tr>
        <td colspan="3">총 <?php echo count($wr3_tot);?>개 강좌 신청 (온라인 강좌 : ??? 개, 오프라인 강좌 :  ??? 개)</td>
        <td>합계</td>
        <td>    원</td>
        <td colspan="2"></td>
    <tr>
</table>

 

지식동냥 좀 하겠습니다. 정답이면 정말 좋겠지만 그게 안된다면 이 문제를 풀 수 있는 작은 힌트라도 주시면 감사하겠습니다.
 

이 질문에 댓글 쓰기 :

답변 3

질문 설명은 이해불가

위 테이블의 for문에 의한 출력은 희망하는대로 정확하게 나오는 것인가요?

그렇다면 온/오프 총 갯수 구하는 것은 아래처럼

(출력 방법대로라면 온출력갯수 오프출력 갯수 따로 더해가면 됨)

그리고 explode구문은 for문 밖에서 처리(for문내에 두면 loop를 돌때마다 explode를 반복 함)

그런데 신청게시판(bbb)에서 저장 및 출력 이해불가

 

하여튼 출력 된 코드로 보아서는 온오프 합계는 아래 코드로 하면 됩니다

       $wr3_check = explode(",", $view['wr_3']);    

       $wr3_tot = count($wr3_check);
       //$wr3_tot = array_count_values($wr3_check); // 신청한 강좌수<--이것이 아님
       $wr_3k = explode(',', $aaa['wr_3']); // aaa게시판의 $wr_3 배열값, 온라인강좌인지 오프라인 강좌인지

 

     $on = $off =0;
    for ($i = 0; $i < $view['wr_2']; $i++) { 
       if($wr_3k[$i]==1) $on++; else $off++;

 

출력

~~개 강좌 신청 (온라인 강좌 : <? php echo $on; ?  > 개, 오프라인 강좌 :  <? php echo $off; ?  > 개)

 

 

 

감사합니다. 균이님.
균이님이 알려주신 소스 덕분에 문제를 잘 해결하였습니다.

제가 지금 만들고 있는 것이 말로하면 쉬운데 글로 표현 하자니 여러가지 한계가 있어 질문이 허접스러웠습니다.

다시 한 번 답변 감사드립니다.

핵심은 마지막 줄 같은데요.

개인적인 의견이지만, 이걸 왜 꼭 게시판 테이블의 여분 필드를 이용해서 해야 하나 하는 생각을 해봅니다.

- 강좌테이블

- 신청테이블 이렇게 2개의 테이블을 만들어서 운영하면 편하게 원하는 값들을 구현할 수 있을 것 같습니다.

다만, 현재 구성된 내용으로 하자면.

1. 전체 온라인 강좌의 고유아이디를 배열로 만듬

2. 전체 오프라인 강좌의 고유아이디를 배열로 만듬

1번과 2번의 경우 1번과 2번의 고유아이디가 중복되면 안됨.

3. 회원이 신청한 강좌의 고유아이디를 배열로 만듬

4. 3가지 배열을 가지고 1,3 배열과 2,3 배열의 중복값으로 각각의 갯수를 구함.

 

답변 감사합니다. 메이드님.^^
말씀하신대로 현재
- 강좌테이블 : aaa게시판
- 신청테이블 : bbb게시판
으로 만들어서 작업하고 있습니다.

온라인 및 오프라인 강좌의 고유아이디는... 음... aaa게시판의 $wr_3 여분필드에 배열값으로 저장되도록 하고 있는데요..(온라인 = 1, 오프라인 = 2)

이와는 다른 방법으로 하는게 더 좋을까요?

그리고 마지막에 말씀하신 3가지 배열을 가지고 1,3 배열과 2,3배열의 중복값의 갯수는 어떻게 구하는 것일까요? 참고할 만한 소스 좀 알려주시면 너무나 감사하겠습니다.

aaa 게시판이 강좌테이블이라면 1게시물 당 1강좌라는 가정하에
강좌의 고유 아이디는 wr_id 가 됩니다. wr_3은 해당 강좌가 온라인이냐 오프라인이냐를 구분하는 것일 뿐이구요.

bbb 신청게시판의 wr_1 필드에 회원이 신청한 강좌의 고유아이디(aaa 게시판의 wr_id) 만 기록하면 될 것 같습니다. (해당 강좌의 정보는 aaa 게시판이 가지고 있으니까요.)

그렇다면,

$online = $offline = array();
$sql = "select * from aaa where (1)";
$res = sql_query($sql);
for($i=0;$row=sql_fetch_array($res);$i++) {
    if($row['wr_3'] == 1) {
        $online[] = $row['wr_id'];
    } else if($row['wr_3'] == 2) {
        $offline[] = $row['wr_id'];
    }
}

$study = array();
$sql = "select wr_1 from bbb where mb_id = '회원 아이디'";
$res = sql_query($sql);
for($i=0;$row=sql_fetch_array($res);$i++) {
    $study[] = $row['wr_1']
}

이런 식으로 3개의 배열을 만들고
array_intersect와, array_unique 함수를 이용해서 각각의 중복된 값만 배열로 만들어서 카운터 하시면 될 듯 합니다.

구체적인 값들이 어떤 형태로 들어가는 지 모르기 때문에 가장 손쉽게 생각할 수 있는 방법을 적어보았습니다.

감사합니다. 메이드님.
허접한 질문에도 정성스런 답변 감사드립니다.

관심가져주신 분들 덕분에 힌트를 얻어 잘 해결했습니다.

해결된 소스는 마감일 지나고 나서 이곳에 게시하도록 하겠습니다.

감사합니다.

우선 query문 부터 보여 주셔야 합니다. join ... group by로 해결가능할 거 같은데 말이죠...

==

$bo_table = aaa (교육강좌 개설 게시판)
  - 교육회차별 강좌수 유동적 (최소 1개 ~ 최대 20강좌 개설)

==

이것도 어떤 형태인지 잘 모르겠네요.

 

aaa게시만 게시물 하나가 의미하는 것이 무엇인가요?

 

국어 1차 강의 - 6월 ( 10강, 강의실 103호)

국어 2차 강의 - 7월 ( 11강, 강의실 104호)

 

이런 형태인가요?

감사합니다. 엑스엠엘님.
매번 답변해 주신데 대해 감사의 말씀드립니다.

현재 리뉴얼 중이고 마감일이 있어 시간에 쫒기다보니 자세하게 설명 못드린 점 죄송하게 생각합니다. 필요한 부분만 적어드리다보니 질문이 허접하게 됐습니다.

참고로 aaa게시판의 하나의 게시물에 여러 개의 강좌를 개설하도록 하고 있습니다.

● 1차 교육 (wr==1)
  - 교육일1 / 교육명1 / 강사1 / 교육종류1(온라인 or 오프라인? / 접수마감일1
  - 교육일2 / 교육명2 / 강사2 / 교육종류2(온라인 or 오프라인? / 접수마감일2 
    .
    .
    .
  - 교육일20 / 교육명20 / 강사20 / 교육종류20(온라인 or 오프라인? / 접수마감일 20

● 2차 교육 (wr==2)
  - 교육일1 / 교육명1 / 강사1 / 교육종류1(온라인 or 오프라인? / 접수마감일1
  - 교육일2 / 교육명2 / 강사2 / 교육종류2(온라인 or 오프라인? / 접수마감일2 
    .
    .
    .
  - 교육일20 / 교육명20 / 강사20 / 교육종류20(온라인 or 오프라인? / 접수마감일 20

이런 구조로 되어있고, bbb게시판에서 위에 있는 교육 차수별 해당강좌를 선택 신청 하도록 되어있습니다. bbb게시판의 wr==1에 aaa게시판의 wr_id값이 저장되어 해당 교육차수의 정보를 불러오게끔 만들었습니다.

어쨋든 허접한 질문에도 정성스런 답변 감사드립니다.
답변해주신 것들 중에 힌트를 얻어 잘 해결하였습니다.

감사합니다.

게시물 하나에 너무 많은 정보를 넣으셨군요.
한 컬럼 안에
여러 가지 성격을 문자열을 넣는 것은
최후의 수단입니다.

보통은 컬럼을 분리하거나 테이블을 따로 만드는 것이
이후 작업을 편리?하게 합니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 123,591 | RSS
QA 내용 검색

회원로그인

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