진정 저를좀 도와주실분...봐주세요 .. > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

진정 저를좀 도와주실분...봐주세요 .. 정보

진정 저를좀 도와주실분...봐주세요 ..

본문

오류가 나는곳의 주소를 알려주시면 더 빠르고 정확하게 답변 받을 수 있습니다.

오류 주소 :



select MIN(wr_num) as min_wr_num from g4_write_approval where  wr_id in (select doc_id from g4_approver_line where approver_id='jjusyl') and wr_1='Approve';


이 구문이 게시판에서 글 검색시 불러오는 구문인데요 검색시간이 너무 오래걸려서 변경을좀해야되는데 서버회사에 문의 하니까 JOIN문으로 하면 된다고 하시는데요..
조언좀해주세요 도저히 모르겠습니다........

테이블에 인덱스도 다 있습니다..

------------------------------------------------------------------------------------------------if ($wr_1== "") {
$add_query ="and wr_1='Progress'";
}else{
$add_query ="and wr_1='$wr_1'";
}


if ($ref_check =="") {
$ref_query ="and write_date is null";
}else{
$ref_query ="and write_date is not null";
}


$check_query = "mb_id = '$member[mb_id]'";

if($approver_id =="true") {
$check_query = "wr_id in (select doc_id from g4_approver_line where approver_id='$member[mb_id]')";
} elseif ($approver_id =="false") {
$check_query = "wr_id in (select doc_id from g4_approve_doc_ref where ref_id='$member[mb_id]' $ref_query)";
$add_query ="";
}



// 분류 사용 여부
$is_category = false;
if ($board[bo_use_category])
{
    $is_category = true;
    $category_location = "./board.php?bo_table=$bo_table&sca=";
    $category_option = get_category_option($bo_table); // SELECT OPTION 태그로 넘겨받음
}

$sop = strtolower($sop);
if ($sop != "and" && $sop != "or")
    $sop = "and";

// 분류 선택 또는 검색어가 있다면
$stx = trim($stx);
if ($sca || $stx)
{
    $sql_search = get_sql_search($sca, $sfl, $stx, $sop);

    // 가장 작은 번호를 얻어서 변수에 저장 (하단의 페이징에서 사용)
    $sql = " select MIN(wr_num) as min_wr_num from $write_table where  $check_query $add_query";
-----------------------------------------------------------------------------------------------
이걸실행하면 맨위에 문장이 실행된 결과입니다...

댓글 전체

select min(wr_num) as in_wr_num from g4_write_approval a
inner join g4_approver_line b on a.wr_id = b.doc_id
where a.wr_1 = 'Approve' and b.approver_id = 'jjusy1'

이렇게 하면 되겠네요.

doc_id 는 프라이머리 키가 되어야 하겠네요 그리고 wr_1 와 approver_idㅜ에도 인덱스가 걸어져 있어야 하겠네요.
$sql = " select MIN(wr_num) as min_wr_num from $write_table where  $check_query $add_query";


이문장으로 수정해 주시면안될까요? 
$check_query부분도요 ...  a.    b.  이런걸 도저히 모르겠어요....

답변달아주신분께서 써주신건 로그인했을시 검색 하는 구문이자나요~?
기본 설정해야하는 소스를 알고시퍼용 ㅠㅠ 도와주세용 행님

인덱스는 다 걸려있어용
g4_write_approval a  => 이부분은 alias 로 이름을 바꾼것입니다.
g4_write.approval.wr_id = a.wr_id 하고 같습니다.

 $sql = " select MIN(wr_num) as min_wr_num from $write_table where  $check_query $add_query";  이부분은

아래처럼 바뀌어야 하구요.

$sql = " select min(a.wr_num) as in_wr_num from g4_write_approval a inner join g4_approver_line b on a.wr_id = b.doc_id where  $check_query $add_query ";

$check_query = "wr_id in (select doc_id from g4_approver_line where approver_id='$member[mb_id]')"; 
위의 부분이 아래처럼 바뀌어야 겠지요.
$check_query = " a.wr_1 = 'Approve' and b.approver_id = '$member[mb_id]'  ";

그리고 add query 부분은  아래처럼

$add_query ="and a.wr_1='Progress'";
}else{
$add_query ="and a.wr_1='$wr_1'";
}


if ($ref_check =="") {
$ref_query ="and a.write_date is null";
}else{
$ref_query ="and a.write_date is not null";
}
 
write_date 필드가 어느 테이블에 있는지에 따라 달라 집니다.

write_date 이 필드가 g4_write_approval 테이블에 있는 필드이면 a. 을 붙이고요
g4_approver_line 에 있는 필드 이면 b. 을 붙이시면 됩니다.
$check_query = "wr_id in (select doc_id from g4_approve_doc_ref where ref_id='$member[mb_id]' $ref_query)";

이부분은 어떻게 바까야하나요?  write_date 필드는 g4_write_approval에 있어서 괜찬을거 같구요

이거 g4_write_approval에 속해잇는 필드 wr_1 이런거 다 a.wr_1로 변경해야하는건가요~?








select distinct wr_parent from g4_write_approval where ((INSTR(wr_subject, '운반') or INSTR(wr_content, '운반')) ) and a.wr_1 = 'Approve' and b.approver_id = 'jjusyl' and a.wr_1='Approve' and wr_is_comment = 0 and (wr_num between '' and '10000')

1054 : Unknown column 'a.wr_1' in 'where clause'

error file : /bbs/board.php


이런오류가떠요 ㅠㅠ 아 정말 답답하네요 .......
아래 부분은 $check_query  변수를 그래도 가져와서 또 대입이 되어서 그렇네요
에러 나는 sql 구문은 조인이 없으니까 이 sql 구문위에 $check_query  변수를 새로 지정하세요.

$check_query  = " wr_1 = 'Approve'  " 이런식으로요.

소스를 부분 부분 보여 주셔서 답변자가 제대로 답변을 못해요 전체 소스가 있어야지 제대로 된 답변을 드릴수가 있답니다.
<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
//$member[mb_id]="sunjk";

if ($wr_1 == "") {
$add_query ="and wr_1='Progress'";
}else{
$add_query ="and wr_1='$wr_1'";
}


if ($ref_check =="") {
$ref_query ="and write_date is null";
}else{
$ref_query ="and write_date is not null";
}


$check_query = "mb_id = '$member[mb_id]'";

if($approver_id =="true") {
$check_query = "wr_id in (select doc_id from g4_approver_line where approver_id='$member[mb_id]')";
} elseif ($approver_id =="false") {
$check_query = "wr_id in (select doc_id from g4_approve_doc_ref where ref_id='$member[mb_id]' $ref_query)";
$add_query ="";
}




// 분류 사용 여부
$is_category = false;
if ($board[bo_use_category])
{
    $is_category = true;
    $category_location = "./board.php?bo_table=$bo_table&sca=";
    $category_option = get_category_option($bo_table); // SELECT OPTION 태그로 넘겨받음
}

$sop = strtolower($sop);
if ($sop != "and" && $sop != "or")
    $sop = "and";

// 분류 선택 또는 검색어가 있다면
$stx = trim($stx);
if ($sca || $stx)
{
    $sql_search = get_sql_search($sca, $sfl, $stx, $sop);

    // 가장 작은 번호를 얻어서 변수에 저장 (하단의 페이징에서 사용)
    $sql = "select MIN(wr_num) as min_wr_num from $write_table where  $check_query $add_query";

    $row = sql_fetch($sql);
    $min_spt = $row[min_wr_num];

    if (!$spt) $spt = $min_spt;
    $sql_search .= " and $check_query $add_query and wr_is_comment = 0 and (wr_num between '".$spt."' and '".($spt + $config[cf_search_part])."') ";
   

  // 원글만 얻는다. (코멘트의 내용도 검색하기 위함)
  //$sql = " select distinct wr_parent from $write_table where  $sql_search ";
  //$result = sql_query($sql);
  //$total_count = mysql_num_rows($result);
   
    // neojzs 최적화 : 20080621
    // 원글만 얻는다. (코멘트의 내용도 검색하기 위함)
$sql = " select count(distinct wr_parent) as cnt from $write_table where $sql_search ";
    $row = sql_fetch($sql);
    $total_count = $row[cnt];
}
else
{
    $sql_search = "$check_query $add_query";


if ($approver_id== "" ) {

$sql = " select distinct wr_parent  from g4_write_approval where wr_is_comment = 0  and $check_query $add_query ";

}
elseif ($approver_id =="true") {

$sql = " select distinct wr_parent  from g4_write_approval a, g4_approver_line b where a.wr_is_comment = 0 and a.wr_id = b.doc_id and b.approver_id='$member[mb_id]' $add_query ";

}

elseif ($approver_id=="false") {

$sql = " select distinct wr_parent  from g4_write_approval a, g4_approve_doc_ref b where a.wr_is_comment = 0 and a.wr_id = b.doc_id and b.ref_id='$member[mb_id]'  $ref_query  ";

}


   
//echo $sql = " select doc_id from g4_approve_doc_ref where ref_id='imcw' and write_date is null  ";


    $result = sql_query($sql);
    $total_count = mysql_num_rows($result);

}

$total_page  = ceil($total_count / $board[bo_page_rows]);  // 전체 페이지 계산
if (!$page) { $page = 1; } // 페이지가 없으면 첫 페이지 (1 페이지)
$from_record = ($page - 1) * $board[bo_page_rows]; // 시작 열을 구함

// 관리자라면 CheckBox 보임
$is_checkbox = false;
if ($member[mb_id] && ($is_admin == "super" || $group[gr_admin] == $member[mb_id] || $board[bo_admin] == $member[mb_id]))
    $is_checkbox = true;

// 정렬에 사용하는 QUERY_STRING
$qstr2 = "bo_table=$bo_table&sop=$sop";

if ($board[bo_gallery_cols])
    $td_width = (int)(100 / $board[bo_gallery_cols]);

// 정렬
// 인덱스 필드가 아니면 정렬에 사용하지 않음
//if (!$sst || ($sst && !(strstr($sst, 'wr_id') || strstr($sst, "wr_datetime")))) {
if (!$sst)
{
    if ($board[bo_sort_field])
        $sst = $board[bo_sort_field];
    else
        $sst  = "wr_num, wr_reply";
    $sod = "";
}
else {
    // 게시물 리스트의 정렬 대상 필드가 아니라면 공백으로 (nasca 님 09.06.16)
    // 리스트에서 다른 필드로 정렬을 하려면 아래의 코드에 해당 필드를 추가하세요.
    // $sst = preg_match("/^(wr_subject|wr_datetime|wr_hit|wr_good|wr_nogood)$/i", $sst) ? $sst : "";
    $sst = preg_match("/^(wr_datetime|wr_hit|wr_good|wr_nogood)$/i", $sst) ? $sst : "";
}

if ($sst)
    $sql_order = " order by $sst $sod ";

if ($sca || $stx)
{
    $sql = " select distinct wr_parent from $write_table where $sql_search $sql_order limit $from_record, $board[bo_page_rows] ";
}
else
{
    if ($approver_id== "" ) {

$sql = " select * from $write_table where wr_is_comment = 0  and $check_query $add_query $sql_order limit $from_record, $board[bo_page_rows] ";

    }
elseif ($approver_id =="true") {

$sql = " select *  from g4_write_approval a, g4_approver_line b where a.wr_is_comment = 0 and a.wr_id = b.doc_id and b.approver_id='$member[mb_id]' $add_query $sql_order limit $from_record, $board[bo_page_rows]";
   
}

elseif ($approver_id=="false") {

$sql = " select *  from g4_write_approval a, g4_approve_doc_ref b where a.wr_is_comment = 0 and a.wr_id = b.doc_id and b.ref_id='$member[mb_id]'  $ref_query $sql_order limit $from_record, $board[bo_page_rows]  ";

}
}
$result = sql_query($sql);

// 년도 2자리
$today2 = $g4[time_ymd];

$list = array();
$i = 0;

if (!$sca && !$stx)
{
    $arr_notice = explode("\n", trim($board[bo_notice]));
    for ($k=0; $k<count($arr_notice); $k++)
    {
        if (trim($arr_notice[$k])=='') continue;

        $row = sql_fetch(" select * from $write_table where wr_id = '$arr_notice[$k]' ");

        if (!$row[wr_id]) continue;

        $list[$i] = get_list($row, $board, $board_skin_path, $board[bo_subject_len]);
        $list[$i][is_notice] = true;

        $i++;
    }
}

$k = 0;

while ($row = sql_fetch_array($result))
{
    // 검색일 경우 wr_id만 얻었으므로 다시 한행을 얻는다
    if ($sca || $stx)
        $row = sql_fetch(" select * from $write_table where wr_id = '$row[wr_parent]' ");

    $list[$i] = get_list($row, $board, $board_skin_path, $board[bo_subject_len]);
    if (strstr($sfl, "subject"))
        $list[$i][subject] = search_font($stx, $list[$i][subject]);
    $list[$i][is_notice] = false;
    //$list[$i][num] = number_format($total_count - ($page - 1) * $board[bo_page_rows] - $k);
    $list[$i][num] = $total_count - ($page - 1) * $board[bo_page_rows] - $k;

    $i++;
    $k++;
}

$write_pages = get_paging($config[cf_write_pages], $page, $total_page, "./board.php?bo_table=$bo_table".$qstr."&approver_id=".$approver_id."&ref_check=".$ref_check."&wr_1=".$wr_1."&page=");

$list_href = '';
$prev_part_href = '';
$next_part_href = '';
if ($sca || $stx)
{

    //if ($prev_spt >= $min_spt)
    $prev_spt = $spt - $config[cf_search_part];
    if (isset($min_spt) && $prev_spt >= $min_spt)
        $prev_part_href = "./board.php?bo_table=$bo_table".$qstr."&spt=$prev_spt&page=1";

    $next_spt = $spt + $config[cf_search_part];
    if ($next_spt < 0)
        $next_part_href = "./board.php?bo_table=$bo_table".$qstr."&spt=$next_spt&page=1";
}

$write_href = "";
if ($member[mb_level] >= $board[bo_write_level])
    $write_href = "./write.php?bo_table=$bo_table";

$nobr_begin = $nobr_end = "";
if (preg_match("/gecko|firefox/i", $_SERVER['HTTP_USER_AGENT'])) {
    $nobr_begin = "<nobr style='display:block; overflow:hidden;'>";
    $nobr_end  = "</nobr>";
}

// RSS 보기 사용에 체크가 되어 있어야 RSS 보기 가능 061106
$rss_href = "";
if ($board[bo_use_rss_view])
    $rss_href = "./rss.php?bo_table=$bo_table";

$stx = get_text(stripslashes($stx));
include_once("$board_skin_path/list.skin.php");
?>
전체 66,554 |RSS
그누4 질문답변 내용 검색

회원로그인

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