php 페이지에 sql 테이블 삽입 수정.

php 페이지에 sql 테이블 삽입 수정.

QA

php 페이지에 sql 테이블 삽입 수정.

답변 2

본문

현재 php 페이지 내에 sql을 이용하여, 게시물에 입력된 DB를 추출해 스케쥴표가 표시되고 있습니다. 카테고리는 총 3개입니다.



<div id="container">
    <div class="content02">
        <h1>CLASS MALL </h1>
        <p class="conTitle pt50">각 <span class="colorB">강좌에 대한 소개와 설명</span> 입니다.</p>
        <!--p class="conTitle pt50"> 페이지<span class="colorB">준비중</span> 입니다.</p-->
        <!--p class="pt30"> 2016년 Pilates in asia. 곧 놀라운 사전등록 혜택으로 클래스 몰을 오픈할 예정입니다.</p-->
        <p class="pt30">
        컨퍼런스 3일 동안 시간대와 순서별로 나열하여 소개하고 있습니다.<br/>
        클릭하시면 해당 강좌에 대한 보다 자세한 정보를 얻으실 수 있습니다.<br/>
        원하시는 강좌를 선택하셔서 수강신청 하시면 장바구니에 담기게 되며 마이페이지에서 전체 선택하신 강좌를 한 번에 확인하실 수 있습니다.<br/>전체 최대 수강 가능하신 범위가 설정되며 범위를 넘지 않게 수강 신청하셔야 합니다.<br/>
        한 사람이 3일 동안 최대 수강 가능한 세션은 9개 클라스이며 최소 수강은 2개 클라스입니다.</p>       
        <!--카테고리별 테이블 생성-->
        <?
        $sql1 = " select * from ".$site_prefix."category where ca_id like '__' order by ca_order asc "; 
        $result1 = sql_query($sql1);
        for($i=0;$row1 = sql_fetch_array($result1);$i++){
            switch($row1["ca_name"]){
                case "금요일":
                    $sub_title1 = "Friday 1st day";
                    break;
                case "토요일":
                    $sub_title1 = "Saturday 1st day";
                    break;
                case "일요일":
                    $sub_title1 = "Sunday 2nd day";
                    break;
            }
        ?>
        <div class="mallCon pt50">
            <h2 class="mallTitle"><span class="mallDay"><?=$row1["ca_name"]?></span> <?=$sub_title1?></h2>
            <table cellpadding="0" cellspacing="0" border="0" class="mall">
                <colgroup>
                    <col width="76" />
                    <col width="132" />
                    <col width="132" />
                    <col width="132" />
                    <col width="132" />
                    <col width="132" />
                    <col width="132" />
                    <col width="132" />
                    <col width="132" />
                </colgroup>
                <tr>
                    <th>Time/<br/>Space</th>
                    <th>101</th>
                    <th>102</th>
                    <th>103</th>
                    <th>104</th>
                    <th>105</th>
                    <th>106</th>
                    <th>107</th>
                    <th>108</th>
                </tr>
                <?
                $sql2 = " select * from ".$site_prefix."category where ca_id like '".$row1["ca_id"]."__' order by ca_order asc ";
                $result2 = sql_query($sql2);
                for($j=0;$row2 = sql_fetch_array($result2);$j++){
                    $row2["ca_name"] = str_replace("/\~/i","<br>~",$row2["ca_name"]);
                ?>
                <tr>
                    <td><?=$row2["ca_name"]?></td>
                    <?
                    $cols = "";
                    for($k=1;$k<=8;$k++){
                        if($cols) continue;
                        $sql3 = " select * from ".$site_prefix."board_classes where bd2 = '".$row1["ca_id"]."' and bd3 = '".$row2["ca_id"]."' and bd7 = 'R".$k."' ";
                        $row3 = sql_fetch($sql3);
                        $context = "";
                        if($row3["BoardIdx"]){
                            switch($row3["bd1"]){
                                case "LB":
                                    $cols = "colspan='8'";
                                    $context = $context."<span class='fontT'>Lunch Time</span> "/*.$row3["Title"]*/;
                                    break;
                                case "DB":
                                    $cols = "colspan='8'";
                                    $context .= $row3["Title"];
                                    break;
                                case "No":
                                    $context = $context.$row3["Title"]."<p class='fontT'>by 미정</p>";
                                    break;
                                // case "END":
                                //     break;
                                default:
                                    $sql4 = " select * from ".$site_prefix."board_lecturer where BoardIdx = '".$row3["bd1"]."' ";
                                    $row4 = sql_fetch($sql4);
                                    $context = $context."<p class='fontT'> ".$row3["bd14"]."</p>".$row3["Title"]."<p class='fontT'>by ".$row4["Title"]."</p>";
                            }
                            if(empty($cols)){
                                if($row3["bd12"] == 0) $context = $context."<p class='fontP'>price 미정</p>";
                                else $context = $context."<p class='fontP'>price ".number_format($row3["bd12"])."</p>";
                                $context =    $context."<p class='pt15'>";
                                $context =        $context."<a href='javascript:;' onclick='lecturer_info(\"".$row4["bd3"]."\",\"".$row3["bd1"]."\",\"".$row3["BoardIdx"]."\");'><img src='/images/classes/btn_info.gif' alt='강좌정보' class='pr3'></a>";
                                if($row3["bd13"] == "Y")
                                    $context =    $context."<a href='javascript:;' onclick='classes_sel(\"".$row3["BoardIdx"]."\",\"".$row3["bd2"]."\",\"".$row3["bd3"]."\");'><img src='/images/classes/btn_request.gif' alt='강좌신청'></a></p>";
                                // else if($row3["bd13"] == "E")
                                //     $context =    $context."끝";
                                else
                                    $context =    $context."<img src='/images/classes/btn_finish.gif' alt='마감'>";
                                $context =    $context."</p>";
                            }
                        } else {
                            $context = "-";
                        }
                    ?>
                    <td <?=$cols?>><?=$context?><input type="hidden" id="price<?=$row3["BoardIdx"]?>" value="<?=$row3["bd12"]?>"></td>
                    <?
                    }
                    ?>
                </tr>
                <?
                }
                ?>
            </table>
        </div>
        <?
        }
        ?>
    </div>
</div>
<script>
function lecturer_info(locations,lecturer_idx,class_idx){
    location.href = "/lecturer/"+locations+".php?lnum="+lecturer_idx+"&cidx="+class_idx;
}
function classes_sel(cidx,bd2,bd3){
    /*
    switch(cidx){
        case "17":
        case "25":
        case "39":
        case "59":
            if(!confirm("해당 강의는 묶음강의 입니다. 신청시 4개 강의가 동시에 신청됩니다. 장바구니에 담으시겠습니까?")) return;
            break;
        case "27":
        case "31":
            if(!confirm("해당 강의는 묶음강의 입니다. 신청시 2개 강의가 동시에 신청됩니다. 장바구니에 담으시겠습니까?")) return;
            break;
    }
    */
    jQuery.blockUI({ "message" : ""});
    jQuery.ajax({
        url: "/classes/_proc_classes.php",
        type : "POST",
        data: "cidx="+cidx+"&price="+$("#price"+cidx).val()+"&bd2="+bd2+"&bd3="+bd3,
        error: function(xhr,textStatus,errorThrown){
            alert('An error occurred! \n'+(errorThrown ? errorThrown : xhr.status));
        },
        beforeSend: function() {
            if($("#price"+cidx).val() <= 0){
                alert('강좌 금액이 제대로 로드되지 않아 페이지를 새로고침 합니다.');
                location.reload();
                return false;
            }
        },
        success: function(data){
            switch(data){
                case "200": //cidx 없을때
                    alert("잘못된 접근입니다.");
                    break;
                case "210": //비회원일때
                    alert("회원전용 메뉴입니다. 회원이시라면 로그인해주시기 바랍니다.");
                    location.href="/member/login.php?URI=<?=urlencode('/classes/mall.php')?>";
                    break;
                case "220": //수강 클래스 9개이상
                    alert("1인이 3일간 수강 가능한 세션은 총 9개 클래스입니다.");
                    break;
                case "230": //insert 에러
                    alert("insert error");
                    break;
                case "240": //이미 장바구니 담긴상품
                    alert("이미 장바구니에 담긴 강의입니다. 다른강의를 선택해주십시오");
                    break;
                case "250": //같은시간대의 상품이 있음
                    alert("이미 동시간대에 신청된 강의가 있습니다. 다른강의를 선택해주십시오");
                    break;
                case "260": //금액이 0원
                    alert("강좌 금액이 제대로 로드되지 않아 페이지를 새로고침 합니다.\n이 메시지가 반복되어 보일경우 관리자에게 문의바랍니다.");
                    location.reload();
                    break;
                case "270": //마감된 강의
                    alert("마감된 강의입니다. 다른강의를 선택해주십시오");
                    break;
                case "100": //성공
                case "110": //묶음강의등록성공
                    if(!confirm("신청하신 강의가 성공적으로 장바구니에 담겼습니다. 지금 확인하시겠습니까?")) return;
                    location.href = "/classes/request.php";
                    break;
                default:
                //    alert(data);
            }
        },
        complete: function(){
            jQuery.unblockUI();
        }
    });    setTimeout(function(){ jQuery.unblockUI(); },2000);
}
</script>
 

문제는 기존 코드가 테이블 양식이 고정되어 있는데 3가지 테이블을 전부 다르게 출력하고 싶은데... SQL은 초보라 어찌어찌 해서 특정 카테고리만 출력되게 까지는 성공을 했습니다만

(카테고리 번호 10, 20, 30)


<?
        

$sql1 = " select * from ".$site_prefix."category where ca_id like bd2 = '10' order by ca_order asc ";

"; 
        $result1 = sql_query($sql1);
        for($i=0;$row1 = sql_fetch_array($result1);$i++){
            switch($row1["ca_name"]){
                case "금요일":
                    $sub_title1 = "Friday 1st day";
                    break;
                case "토요일":
                    $sub_title1 = "Saturday 1st day";
                    break;
                case "일요일":
                    $sub_title1 = "Sunday 2nd day";
                    break;
            }
        ?>

나머지 카테고리도 각각 소스를 복사해서 붙여넣으니 오류가 나더라고요.. 사이트가 아예 먹통...

어떻게 해야 좋을까요....

이 질문에 댓글 쓰기 :

답변 2

sql1,sql2,sql3 을 실행할때 fetch_array내에서 계속실행되면 DB버전에 따라 속도가 아주느리거나 오류를 뱉어 낼겁니다.(서브쿼리의 서브쿼리)

mariadb 계열이라면 더더욱 그럴거 같아요

저같으면 각각 sql 을 각각의 변수에 따로 담아서 처리할것 같아요

$sql1 실행 결과는 $list1에 담고

$sql2 실행 결과는 $list2에 담고

$sql3 실행 결과는 $list3에 담고 처리를 해보세요

다차원 배열형태로 가는것이 좋은데

관련 내용은 구글링하시면 될것 같아요

$sql2 에 보면 $row1값을 토대로 처리하고 

$sql3 에 보면 $row2값을 토대로 처리하니

DB입장에서는 각 sql마다 1개의 row를 가지는것이 아니라고 판단하여

sql1결과 레코드 * sql2결과 레코드 * sql3결과 레코드의 DB 연산을 하게 되는것입니다.

많이 비효율적일것 같아요

각 sql은 한번씩만 처리하고 배열 변수에 담아두고 처리하게끔하는것이 DB 부하를 줄이고 쾌적한 속도를 위한 첫걸음이 될것 같아요

이걸 잘배워 놓으시면 훗날 검색엔진 다룰일이 있다면 도움이 되실거니 충분히 고민을 해서 이문제를 해결하시는데 도움이 되었으면 좋겠습니다.

문제는 기존 코드가 테이블 양식이 고정되어 있는데 3가지 테이블을 전부 다르게 출력하고 싶은데... 

=≠=

필요한 컬럼을 모두 추가 하시고

구분용(type)으로 하나 더 추가해서

type 별로 필요한 컬럼을 가져다 쓰시면 됩니다.

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