채택완료

쿼리문 여분필드 업데이트 중 wr_2, wr_4의 값을 각각 더하기 출력하고싶습니다.

고수님들의 지원이 필요합니다. 도와주십시요.
wr_1 ` wr_4 중에 모두 업데이트되는데 그 중 wr_2, wr_4만 내용을 더하고 싶습니다.
$exist_row = sql_fetch(" SELECT wr_id FROM $write_table WHERE wr_subject = '$wr_subject' ORDER BY wr_id DESC LIMIT 1 ");

        if ($exist_row['wr_id']) {
            // 이미 존재하는 글 → 값이 있는 여분필드만 UPDATE
            $set_arr = array();
            if ($wr_1 !== '') $set_arr[] = "wr_1 = '$wr_1'";
            if ($wr_2 !== '') $set_arr[] = "wr_2 = '$wr_2'";
            if ($wr_3 !== '') $set_arr[] = "wr_3 = '$wr_3'";
            if ($wr_4 !== '') $set_arr[] = "wr_4 = '$wr_4'";

            if (count($set_arr) > 0) {
                sql_query(" UPDATE $write_table SET " . implode(', ', $set_arr) . " WHERE wr_id = '{$exist_row['wr_id']}' ");
            }
            $update_count++;
        } else {
            // 새 글 INSERT
            $wr_num = get_next_num($write_table);

            $wr_option    = $html;
            $wr_seo_title = exist_seo_title_recursive('bbs', generate_seo_title($wr_subject), $write_table, $wr_id);
|

답변 3개 / 댓글 6개

채택된 답변
+20 포인트
if ($exist_row['wr_id']) {
    $set_arr = array();

    // wr_1, wr_3은 그대로 업데이트 (덮어쓰기)
    if ($wr_1 !== '') $set_arr[] = "wr_1 = '$wr_1'";
    if ($wr_3 !== '') $set_arr[] = "wr_3 = '$wr_3'";

    // wr_2, wr_4는 명시적으로 숫자로 변환 후 더하기
    if ($wr_2 !== '') {
        // CAST(wr_2 AS SIGNED)를 통해 문자열을 숫자로 취급하여 더함
        $set_arr[] = "wr_2 = CAST(IFNULL(wr_2, 0) AS SIGNED) + " . (int)$wr_2;
    }
    if ($wr_4 !== '') {
        $set_arr[] = "wr_4 = CAST(IFNULL(wr_4, 0) AS SIGNED) + " . (int)$wr_4;
    }

    if (count($set_arr) > 0) {
        $sql = " UPDATE $write_table SET " . implode(', ', $set_arr) . " WHERE wr_id = '{$exist_row['wr_id']}' ";
        sql_query($sql);
    }
    $update_count++;
}

답변에 대한 댓글 1개

고맙습니다. 고생하셨습니다.
if ($exist_row['wr_id']) {
    // 이미 존재하는 글 → 값이 있는 여분필드만 UPDATE
    $set_arr = array();

    // wr_1, wr_3은 그대로 업데이트 (덮어쓰기)
    if ($wr_1 !== '') $set_arr[] = "wr_1 = '$wr_1'";
    if ($wr_3 !== '') $set_arr[] = "wr_3 = '$wr_3'";

    // wr_2, wr_4는 기존 숫자에 더하기 (+)
    // IFNULL을 사용하여 기존 값이 비어있을 경우 0으로 처리합니다.
    if ($wr_2 !== '') {
        $set_arr[] = "wr_2 = IFNULL(wr_2, 0) + " . (int)$wr_2;
    }
    if ($wr_4 !== '') {
        $set_arr[] = "wr_4 = IFNULL(wr_4, 0) + " . (int)$wr_4;
    }

    if (count($set_arr) > 0) {
        $sql = " UPDATE $write_table SET " . implode(', ', $set_arr) . " WHERE wr_id = '{$exist_row['wr_id']}' ";
        sql_query($sql);
    }
    $update_count++;
}
if ($exist_row['wr_id']) {
    // 이미 존재하는 글 → 값이 있는 여분필드만 UPDATE
    $set_arr = array();

    // wr_1, wr_3은 그대로 업데이트 (덮어쓰기)
    if ($wr_1 !== '') $set_arr[] = "wr_1 = '$wr_1'";
    if ($wr_3 !== '') $set_arr[] = "wr_3 = '$wr_3'";

    // wr_2, wr_4는 기존 내용에 더하기 (CONCAT 사용)
    // 구분자(예: 공백이나 줄바꿈)가 필요하다면 ' ', '\n' 등을 중간에 넣으세요.
    if ($wr_2 !== '') {
        $set_arr[] = "wr_2 = CONCAT(IFNULL(wr_2, ''), '$wr_2')";
    }
    if ($wr_4 !== '') {
        $set_arr[] = "wr_4 = CONCAT(IFNULL(wr_4, ''), '$wr_4')";
    }

    if (count($set_arr) > 0) {
        $sql = " UPDATE $write_table SET " . implode(', ', $set_arr) . " WHERE wr_id = '{$exist_row['wr_id']}' ";
        sql_query($sql);
    }
    $update_count++;
}

답변에 대한 댓글 5개

너무 너무 감사합니다.
wr_2, wr_4 가 문자가 아니라 수자입니다. 기존 데이터가 그대로 표시되네요. 기존내용이 숫자로 합을 구하고 싶습니다.
2가지 방법을 써도 그냥 합할 수가 문자로 연속 보이네요 미안합니다. 귀찮게해서요.
위에 새로쓴 댓글로 하셔도 합쳐지지 않는다는걸까요?
맨위에 형변환 다시넣었는데 저거로 테스트한번 해보세요.
정말 감사합니다. 완벽합니다. 고생하셨어요.

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