무시카게 SQL Query 갯수 줄이기

불당   
   조회 8508   추천 0    

/lib/latest.my.lib.php에서 Query 갯수를 반으로.

목표는 for loop 만큼의 Query를 1개로 만드는 것... ㅎㅎ

 

(원본) for loop에서 2번의 SQL이 수행 됨 (게시글 정보 1번 - 게시판 정보 1번)

    for ($i=0; $row = sql_fetch_array($result); $i++) {
        $tmp_write_table = $g4[write_prefix] . $row[bo_table];
        $sql_select = " wr_id, wr_subject, wr_option, wr_content, wr_comment, wr_parent, wr_datetime, wr_last, wr_homepage, wr_name, wr_reply, wr_link1, wr_link2, ca_name, wr_hit, wr_file_count ";
        $sql2 = " select $sql_select from $tmp_write_table where wr_id = '$row[wr_id]' ";
        $row2 = sql_fetch($sql2);

        $bo_table = $row[bo_table];
        $sql = " select bo_table, bo_notice, bo_subject, bo_subject_len, bo_use_list_content, bo_use_sideview, bo_use_comment, bo_hot, bo_use_search from $g4[board_table] where bo_table = '$row[bo_table]'";
        $board = sql_fetch($sql);
    
        $list[$i] = get_list($row2, $board, $latest_skin_path, $subject_len);
    }

(수정판) for loop에서 1번의 Query만 수행 (게시글 정보 가지고 올때 게시판 정보를 join...)


    for ($i=0; $row = sql_fetch_array($result); $i++) {
        $tmp_write_table = $g4[write_prefix] . $row[bo_table];
        $sql_select = " wr_id, wr_subject, wr_option, wr_content, wr_comment, wr_parent, wr_datetime, wr_last, wr_homepage, wr_name, wr_reply, wr_link1, wr_link2, ca_name, wr_hit, wr_file_count ";
        $bo_select = " bo_table, bo_notice, bo_subject, bo_subject_len, bo_use_list_content, bo_use_sideview, bo_use_comment, bo_hot, bo_use_search ";
        $sql2 = " select $sql_select , $bo_select from $tmp_write_table a left join $g4[board_table] b on b.bo_table = '$row[bo_table]' where wr_id = '$row[wr_id]' ";
        $row2 = sql_fetch($sql2);

        // 진짜로 무시칸 코드죠? ㅎㅎ
        $board = array();
        $board[bo_table] = $row2[bo_table];
        $board[bo_notice] = $row2[bo_notice];
        $board[bo_subject] = $row2[bo_subject];
        $board[bo_subject_len] = $row2[bo_subject_len];
        $board[bo_use_list_content] = $row2[bo_use_list_content];
        $board[bo_use_sideview] = $row2[bo_use_sideview];
        $board[bo_use_comment] = $row2[bo_use_comment];
        $board[bo_hot] = $row2[bo_hot];
        $board[bo_use_search] = $row2[bo_use_search];

        $list[$i] = get_list($row2, $board, $latest_skin_path, $subject_len);
    }

- opencode.co.kr -
내가누구 2009-09
$board = array();
foreach($row2 as $k => $v){
    if(substr($k, 0, 3) == 'bo_')$board[$k] = $v;
}

더 간단하게

$list[$i] = get_list($row2, $row2, $latest_skin_path, $subject_len);
불당 2009-09

감사합니다.

그 방법도 고민했는데, 뭘 넣는지 확실하게 보려구 일부러 뒀어요 (핑계 맞아요. ㅎㅎ)

쫠스 2013-05
일단 무시캐서 지켜봐야 겠네요 ㅠ.ㅠ
좀더 스마트 해질때까지... 변경된 소스 있으면 좀 알려주세요 ^^
     
불당 2013-05
변경된 소스를 불당팩의 업데이트를 참조하세요.
개별로는 건수가 많아서 수정하지 않습니다.


제목Page 2/4
2010-11   11841   불당
2010-10   9418   불당
2010-10   9115   불당
2010-06   9592   불당
2010-06   14280   불당
2010-04   8059   불당
2010-04   7448   불당
2010-04   15413   불당
2009-12   7614   불당
2009-12   11120   불당
2009-11   7812   불당
2009-11   6749   불당
2009-08   8509   불당
2009-08   6793   불당
2009-08   6971   불당
2009-08   7615   불당
2009-08   7765   불당
2009-07   7672   불당
2009-06   6166   불당
2009-04   6708   불당