mysql db의 여유필드 데이터값 복사에 관한 질의 > 그누4 질문답변

그누4 질문답변

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

mysql db의 여유필드 데이터값 복사에 관한 질의 정보

mysql db의 여유필드 데이터값 복사에 관한 질의

본문

db작업에 능하신분의 도움글을 부탁드립니다. ^^ ;;
 
아래 질문의 쿼리문을 파일형식으로 만들어서
일괄적으로 처리하고자 하는게 목적입니다.
 
질문이 서툴러서 이해가 좀 어려울수도 있으니 양해부탁드립니다.
 
-------------------------------------------------
질문 1
-------------------------------------------------
- 같은테이블내에서 필드값 복사
 
1. 테이블명 : g4_write_board01
   - 여유필드 : wr_2  (데이터값이 들어있는 필드)
   - 여유필드 : wr_5  (비어있는 필드)
 
 
 
g4_write_board01 이라는 게시판이 있습니다. (게시물 약 100여개 정도)
해당 게시판의 wr_2 의 여유필드를 사용하여 그곳에 간단한 데이터값을 넣어둔 상태입니다.
 
 
그런데 스킨의 수정과정에서... 사정이 생겨서 ....
모든 게시물의 wr_2의 값을 wr_5 필드로 일괄적으로 모두 옮기(or 복사)려고 합니다.
 
 mysql 접속상태에서 그냥...
 mysql> update gr_write_board01 set wr_2 = wr_5;
 
 라고 하면 되지만, 이걸 파일형태로 만들어서 필요할때마다 불러서 사용하려고 하는데
 쿼리구문을 어떤식으로 만들어야 할지 모르겠네요.
 
 
-------------------------------------------------
질문 2
-------------------------------------------------
- 확장필드의 값을 각각의 여유필드값으로 다시 넣기

참고)
여유필드란 ... wr_1 ~ wr_10 을 지칭하고
확장필드란 ... 여유필드중에서 다시 확장하여 여러개의 값을 처리하기 위해 쪼개둔 필드를 말함.
 
 
1. 테이블명 : g4_write_board02

   - 여유필드 : wr_9 (확장필드3개의 값이 모두 들어있는 필드)

   - 여유필드 : wr_6 (비어있는 필드 / ext9_01 값을 옮길 필드)
   - 여유필드 : wr_7 (비어있는 필드 / ext9_02 값을 옮길 필드)
   - 여유필드 : wr_8 (비어있는 필드 / ext9_02 값을 옮길 필드)
 
g4_write_board02 테이블에 입력해야하는 값이 많아서
wr_9의 여유필드를 다시 쪼개어 ext9_01, ext9_02, ext9_03 으로 3개를 만든뒤,
글등록시 '확장필드' 형식으로 값을 입력받았습니다.

그리고 그렇게 입력받은 값은 wr_9 필드에 저장될때, '|'자로 구분하여
입력된 상태입니다.

예를 들어 '확장필드'에 입력받은 값이 아래와 같다고 할때...
ext9_01 = '자동차';
ext9_02 = '택시';
ext9_03 = '버스';

'wr_9 필드'에는 아래와 같이 저장이 됩니다.
wr_9의 값 -> '자동차|택시|버스'
 
 
질문입니다.

g4_write_board02 라는 테이블 안에서
wr_9 여유필드에 들어있는 값인 확장필드(ext9_01, ext9_02, ext9_03)의 3개값을
각각의 여유필드 wr_6, wr_7, wr_8 값으로 다시 분리해서
입력처리를 하고싶습니다.

특정한개의 값이 아니라, 테이블 내의 게시물 모두를 일괄적으로 처리하려고 합니다.
이 경우에는 파일형식으로 mysql 쿼리구문을 만들어서 처리를 해야 할거 같은데
방법을 모르겠습니다.
 
나름대로 최대한 풀어서 적긴했는데... -_- ;;
질문을 이해한 고수분들중에 도움글을 좀 요청드립니다.
 
 
P.S;
 
1번 질문의 경우는 그냥 동일한 테이블내에서
특정필드값 전체를 특정필드값으로 복사OR이동하면 되는거고
 
2번 질문의 경우는 좀 복잡하게도
'|' 구분자로 표시하여 들어있는 특정필드의 값을
3개의 필드값에 분리해서 넣는 방법에 대한 문의 입니다.
 
스킨변경시, 수정을 가해야 할경우 꼭 필요한 팁이라서 꼭 좀 도와주시길 요청합니다.
  • 복사

댓글 전체

질문1

<?
// 하나의 테이블을 전체 뽑고...
$sql = " select * from g4_write_board01 order by wr_id asc ";
$result = sql_query($sql);
for ($i=0; $row=sql_fetch_array($result); $i++) {

// wr_5에 값이 없을 때 출력
if ($row[wr_id] && !$row[wr_5]) {

// 업데이트
$sql2 = " update g4_write_board01 set wr_5 = '$row[$wr_2]' where wr_id = '$row[wr_id]' ";
sql_query($sql2);


} // wr_5 값 없을 때 닫고
} // 전체 for 닫고
?>
질문2

<?

// 하나의 테이블을 전체 뽑고...
$sql = " select * from g4_write_board02 order by wr_id asc ";
$result = sql_query($sql);
for ($i=0; $row=sql_fetch_array($result); $i++) {

// wr_6에 값이 없을 때 출력
if ($row[wr_id] && !$row[wr_6]) {

// 분류를 구분
$arr = explode(",", $row[wr_9]); // 구분자가 , 로 되어 있음
//for ($j=0; $j<count($arr); $j++) {
for ($j=0; $j<3; $j++) {

// 첫번째
if ($j == '0') {
$wr_6 = $arr[0];

echo $wr_6." |";

// 쪼갠거 첫번째 wr_6에 업데이트
$sql2 = " update g4_write_board02 set wr_6 = '$wr_6' where wr_id = '$row[wr_id]' ";
sql_query($sql2);
}

// 두번째
if ($j == '1') {
$wr_7 = $arr[1];

echo $wr_7." |";

// 쪼갠거 두번째 wr_7에 업데이트
$sql3 = " update g4_write_board02 set wr_7 = '$wr_7' where wr_id = '$row[wr_id]' ";
sql_query($sql3);
}

// 세번째
if ($j == '2') {
$wr_8 = $arr[2];

echo $wr_8." | ";
echo $row[wr_id]."<p>";

// 쪼갠거 세번째 wr_8에 업데이트
$sql4 = " update g4_write_board02 set wr_8 = '$wr_8' where wr_id = '$row[wr_id]' ";
sql_query($sql4);
}

} // 쪼갠거 닫고
} // wr_6 값 없을 때 닫고
} // 전체 for 닫고
?>
리플감사합니다. 근데..둘다 안되는군요...  -_- ;;


그리고...
sql_query, sql_fetch_array 같은건 '그누보드'내에서 정의되어 사용되는것으로 알고있습니다.

일반 파일에서 쿼리문을 만들어 실행시키려면 ...

<?
$host = 'localhost'; //호스트
$user = 'db명';
$password = '패스워드';
$db = '계정명';

$con = mysql_connect($host, $user ,$password);
mysql_select_db($db,$con);
?>

위와 함께....

sql_query -> mysql_query
sql_fetch_array -> mysql_fetch_row .... 이런식으로 바꿔줘야 하는거 같군요.

어쨋던 안되는군요~
1번
<?
$host = 'localhost'; //호스트
$user = 'db명';
$password = '패스워드';
$db = '계정명';

$con = mysql_connect($host, $user ,$password);
mysql_select_db($db,$con);

$sql = " update gr_write_board01 set wr_2 = wr_5 ";
mysql_query($sql);
?>
2번
<?
mysql 접속부분 위와 동일하니 생략
$sql = " select wr_id,wr_9 from g4_write_board02 order by wr_id asc ";
$result = mysql_query($sql);
for($i=0;$i<$row=mysql_fetch_array($result);$i++) {
    $temp = explode("|",$row[wr_9]);
    $sql = " update g4_write_board2 set wr_6 = '$temp[0]', wr_7 = '$temp[1]', wr_8 = '$temp[2]' where wr_id = '$row[wr_id]' ";
    mysql_query($sql);
}
?>

이런식으로 하시면 됩니다. 골격은 위에꺼처럼 하시고 필요하신 내용은 더 추가하세요.
그럼...
오~~ 잘됩니다.
원하는대로 깔끔하게 됐습니다. 감사합니다. '꿈꾸는 비행기'님~ ^^ ;;


하다보니 궁금한게 하나 더 생겼는데 혹~ 보시게 되면
추가 리플 한번만 더 부탁드리겠습니다.. 아래것도 해결되면 팁란에 올려둘 생각입니다.

스킨작업시 크게 도움이 될수 있는 팁이라서...꼭 좀 부탁드리겠습니다.


추가 궁금사항은...

위처럼, wr_9갑을 쪼개서 wr_6, wr_7, wr_8 로 나누어 저장한 뒤에
이걸 다시 합쳐서 한군데의 필드속(wr_9) 으로 넣으려면 구문이 어떻게 되는지요?


위를 예로 들었지만, 스킨을 확장하면서 ...
특정게시판에 wr_1, wr_2, wr_3, wr_4 이런식으로 여러군데 나누어져 들어있는 필드값을
하나의 필드값(예: wr_9) 안에 '|' 구분자를 이용해서 집어넣고
재작업을 해야할 경우가 생길때가 있습니다.

다른것도 그렇지만 db부분은 맹탕이라서... 이글 보시게 되면 한번더 부탁드립니다..꾸벅~


[질문] 여러군데 나눠진 여유필드값을 한개의 여유필드값속으로 '|' 구분자를 이용해 넣는방법
도움이 되셨다니 다행이네요.
나눠진 필드 합치는 것도 방법은 거의 동일합니다.
<?
mysql 접속부분 위와 동일하니 생략
$sql = " select wr_id,wr_6,wr_7,wr_8 from g4_write_board02 order by wr_id asc ";
$result = mysql_query($sql);
for($i=0;$i<$row=mysql_fetch_array($result);$i++) {
    $temp = $row[wr_6]."|".$row[wr_7]."|".$row[wr_8];
    $sql = " update g4_write_board2 set wr_9 = '$temp' where wr_id = '$row[wr_id]' ";
    mysql_query($sql);
}
?>
상단링크는 여유필드에 입력된 데이터를 세분하게 옮기기 또는 합쳐서 복사하기...등등


차후 프로그램업데이트 또는 변경시에 기존게시판 필드 손안대고..
처리를 위한.. 필드 쪼개기



write.skin.php
.......................................................

최상단에 분활필드 지정
view sourceprint?01 <? 

02 if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가 

03   

04 // 제품명(건명)과 페이지수 

05 $ex1_filed = explode("|",$write[wr_1]); 

06 $ext1_00  = $ex1_filed[0]; 

07 $ext1_01  = $ex1_filed[1]; 

08 $ext1_02  = $ex1_filed[2]; 

09   

10 ?>

내용입력부분에
view sourceprint?1 <input name='ext1_00' class=ed value='<?=$ext1_00?>' style="width:100%;"> 

2 <input name='ext1_01' class=ed value='<?=$ext1_01?>' style="width:100%;"> 

3 <input name='ext1_02' class=ed value='<?=$ext1_02?>' style="width:100%;">


view.skin.php
.......................................................

최상단에 불러올 분활필드 지정
view sourceprint?01 <? 

02 if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가 

03   

04 $ex1_filed =  explode("|",$view[wr_1]); 

05 $ext1_00  =  $ex1_filed[0]; 

06 $ext1_01  =  $ex1_filed[1]; 

07 $ext1_02  =  $ex1_filed[2]; 

08   

09 ....... 

10 $ex3_filed =  explode("|",$view[wr_3]); //주소부분 

11 $add_no = $ex3_filed[0] ."-". $ex3_filed[1]; 

12 $add = $ex3_filed[2] ." ". $ex3_filed[3]; 

13 ...........

불러올때는
view sourceprint?1 <?=$ext1_00?>

이런식으로 불러오면 된다

또는
조건을 달아줘서
view sourceprint?1 <? 

2 if($ex3_filed[0]) echo "<span style=font-family:tahoma;font-size:8pt;>(".$add_no.")</span>"; 

3 if($ex3_filed[2]) echo " ".$add." "; 

4 ?>



write_update.skin.php
.......................................................

에는
view sourceprint?01 <? 

02 if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가 

03   

04 //  담당자명 건명 페이지 

05 $wr_1 = "$ext1_00|$ext1_01|$ext1_02|$ext1_03"; 

06 $sql1 = " update $write_table set wr_1 = '$wr_1' where wr_id = '$wr_id' "; 

07 sql_query($sql1); 

08   

09 //주소2 

10 $wr_3 = "$ext3_00|$ext3_01|$ext3_02|$ext3_03"; 

11 $sql3 = " update $write_table set wr_3 = '$wr_3' where wr_id = '$wr_id' "; 

12 sql_query($sql3);




list.skin.php
.......................................................

주위 : 중간에 목록부분에 사용할 분활필드를 불러온다
view sourceprint?1 <!-- 목록 --> 

2 <? for ($i=0; $i<count($list); $i++) { 

3   

4        $ex1_filed =  explode("|",$list[$i][wr_1]);   

5        $ext1_00  =  $ex1_filed[0]; 

6        $ext1_01  =  $ex1_filed[1]; 

7        $ext1_02  =  $ex1_filed[2]; 

8   

9 ?>

출력하고자 하는부분에 넣을것
view sourceprint?1 <?=$ext1_01?>

Tweet
© SIRSOFT
현재 페이지 제일 처음으로