2026, 새로운 도약을 시작합니다.

도저히 모르겠어서 질문 드립니다. SQL문...

function update_category_rankings($url_path, $board_name) {
    $sql = "SELECT wr_id, wr_subject, CAST(wr_10 AS UNSIGNED) AS wr_10, 
                COALESCE(wr_good, 0) AS wr_good
            FROM g5_write_{$url_path}
            WHERE wr_10 IS NOT NULL AND wr_nogood < 1
            ORDER BY (wr_10 * 1.5 + wr_good * 1.3) DESC
            LIMIT 100";

    $result = sql_query($sql);
    $rank = 1;

    while ($row = sql_fetch_array($result)) {
        $score = ($row['wr_10'] * 0.7) + ($row['wr_good'] * 1.3);

        $prev_category_rank_sql = "SELECT category_rank FROM g5_rank_list WHERE wr_id = '{$row['wr_id']}' AND url_path = '{$url_path}' ORDER BY id DESC LIMIT 1";
        $prev_category_rank_result = sql_query($prev_category_rank_sql);
        $prev_category_rank_row = sql_fetch_array($prev_category_rank_result);
        $previous_category_rank = $prev_category_rank_row ? $prev_category_rank_row['category_rank'] : null;

        $upsert_sql = "INSERT INTO g5_rank_list 
                       (wr_id, category_rank, previous_category_rank, subject, score, good, board_name, url_path) 
                       VALUES (
                           '{$row['wr_id']}', 
                           {$rank}, 
                           " . ($previous_category_rank !== null ? $previous_category_rank : "NULL") . ", 
                           '" . sql_real_escape_string($row['wr_subject']) . "', 
                           {$score}, 
                           {$row['wr_good']}, 
                           '{$board_name}', 
                           '{$url_path}'
                       ) 
                       ON DUPLICATE KEY UPDATE 
                       category_rank = VALUES(category_rank), 
                       previous_category_rank = VALUES(previous_category_rank), 
                       subject = VALUES(subject), 
                       score = VALUES(score), 
                       good = VALUES(good)";
        
        sql_query($upsert_sql);
        $rank++;
    }
}

function update_overall_rankings() {
    $sql = "SELECT wr_id, wr_subject, CAST(wr_10 AS UNSIGNED) AS wr_10, 
                COALESCE(wr_good, 0) AS wr_good
            FROM g5_write_all
            WHERE wr_10 IS NOT NULL AND wr_nogood < 1
            ORDER BY (wr_10 * 1.5 + wr_good * 1.3) DESC
            LIMIT 100";

    $result = sql_query($sql);
    $rank = 1;

    while ($row = sql_fetch_array($result)) {
        $score = ($row['wr_10'] * 0.7) + ($row['wr_good'] * 1.3);

        $prev_overall_rank_sql = "SELECT overall_rank FROM g5_rank_list WHERE wr_id = '{$row['wr_id']}' ORDER BY id DESC LIMIT 1";
        $prev_overall_rank_result = sql_query($prev_overall_rank_sql);
        $prev_overall_rank_row = sql_fetch_array($prev_overall_rank_result);
        $previous_overall_rank = $prev_overall_rank_row ? $prev_overall_rank_row['overall_rank'] : null;

        $upsert_sql = "INSERT INTO g5_rank_list 
                       (wr_id, overall_rank, previous_overall_rank, subject, score, good, board_name, url_path) 
                       VALUES (
                           '{$row['wr_id']}', 
                           {$rank}, 
                           " . ($previous_overall_rank !== null ? $previous_overall_rank : "NULL") . ", 
                           '" . sql_real_escape_string($row['wr_subject']) . "', 
                           {$score}, 
                           {$row['wr_good']},
                           'ALL',
                           'all'
                       ) 
                       ON DUPLICATE KEY UPDATE 
                       overall_rank = VALUES(overall_rank), 
                       previous_overall_rank = VALUES(previous_overall_rank), 
                       subject = VALUES(subject), 
                       score = VALUES(score), 
                       good = VALUES(good),
                       board_name = 'ALL',
                       url_path = 'all'";
        
        sql_query($upsert_sql);
        $rank++;
    }
}

소스는 대략 이렇습니다. 전체 카운터와 카테고리 카운터를 등록을 하려고 하는데 카운터가 카테고리는 등록이 되는데 전체 필드가 등록이 안되는 현상입니다.

overall_rank, previous_overall_rank 이 두개의 필드가 죽어도 안들어가네요...데이터가 숫자가 들어가야 하는데 DB를 봐도 안들어가 있고 희안한건 category_rank, previous_category_rank 이것 두개는 데이터가 들어갑니다...ㅠㅠ 고수님들 도와주세요..

답변 3개

  {$rank}, ->  '{$rank}', 이런식으로 변경해보세요.

추측하기로 특정 값이 없어서 에러나는것 같네요.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

플라이님 말씀처럼 phpmyadmin 에서 SQL 쿼리해보세요.

왠만한 오류들은 알려줍니다.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

쿼리를 직접 찍어서 확인해 보시고 phpMyAdmin에서 직접 쿼리를 실행해서 문제를 체크해 보셔야 할듯 합니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

sql문으로 직접 자료를 넣으면 자료는 들어가거든요...진짜 희안하네요..ㄷㄷ

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인
🐛 버그신고