DB쪽에 문제가 생겼는데요.. 도움좀 주세요 > 그누4 질문답변

그누4 질문답변

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

DB쪽에 문제가 생겼는데요.. 도움좀 주세요 정보

DB쪽에 문제가 생겼는데요.. 도움좀 주세요

본문

노무현 전대통령님의 서거를 애도합니다.

첨부파일의 DB table에서 리스트를 뽑아오는데요.
몇일전 부터 최근리스트가 나오지 않아 phpMyAdmin에서 DB테이블을 봤는데요.

리스트에서 Total을 PRIMARY에서 받아와서 뿌려주는데요.
첨부파일과 같이 
행통계의 다음 Autoindex의 숫자인 2696-1가 실제게시물 번호가 되서 리스트에 뿌려줘야 하는데요 
PRIMARY 2552 가 Total로 나와서 2552까지만 리스트에서 나오고 더이상 받아올 수 없어
게시판리스트에서 글이 나타나질 않습니다.

제가 DB를 전혀 몰라서요.   첨부파일을 봐주시고 PRIMARY 숫자가 실제 등록글의 숫자인 2695(2696-1)로 표시될 수 있게 하려면 어떻게 하는지 자세히 갈켜주시면 정말 감사하겠습니다

댓글 전체

이 방법은 단순히 auto_increment 값을 조정하는 방법일 뿐입니다.

1. 일단  자동 증가값 필드를 한번더 확인해 봅니다. 최종값이 얼마인지

2. 상위 메뉴중에 테이블 작업에 테이블 옵션 항목에서 auto_incerment 를 조정해 봅니다. 1번 항목의 최종값보다 1큰 값을 입력합니다.

3. 테이블 최적화를 해봅니다.


의문 및 문제점

대충 이렇게 하시면 DB는 맞게 나올듯 합니다만... 리스트에 토탈 갯수가 2552 개라면 실제 내용물이 2552 개 뿐입겁니다..

중간에 삭제된 내용도 있을듯 하구요..

auto_index 는 단지 다음 증가값을 가지는 것 뿐입니다.. (그래서 값이 틀릴수 있는겁니다)

지금의 게시물이라면 아마 중간에 삭제된 게시물이 있고 자동 증가값 부분은 단지  다음값일 뿐이고 실제 값은 2552 개 뿐일겁니다...

아마 나머지 부분은 님께서 가지신 게시판 로직을 보지 않은 이상 답변 드리기가 어렵다가 정답일듯 합니다.

DB 부분이 문제가 아닌 게시물 호출을 하시는 로직상의 문제가 아닐까 하는 생각을 해봅니다.
답변감사드립니다..

list파일와 listprocee파일은 아래의 소스로 되어 있습니다.(원본과 바뀌질 않았는데 이런현상이 있고 header와 footer를 없애고 실행해도 같은 현상이 나타납니다. 

소스상 어떤 문제가 있는지 저는 도저히 알수가 없어서 봐주시면 감사드리겠습니다..


================================ list파일 ================================================
★ 리스트파일 시작 ★


<?
session_start();
##-------------------------------------------------------------------##
##                          파일명 및 설명
##-------------------------------------------------------------------##
##  파일이름 : qna_list.php
##  파일설명 : 1:1 질문과 답변 리스트
##-------------------------------------------------------------------##
include ("../lib/config.php");
include ("../lib/function.php");
include ("./auth.php");
include ("./header.php");
$scale = 10;
$pagescale = 10;

if(!$start)$start=0;

$count_que = "select count(idx) from $QnA_Table";
$result_count = mysql_query($count_que);
$total = mysql_fetch_array($result_count);
$total = $total[0];
$format_total = number_format($total);

$list_que = "select * from $QnA_Table where idx='1' order by main limit $start,$scale";
$result_list = mysql_query($list_que);
$s_total = mysql_affected_rows();

?>
<img src="./images/bar/29.gif">
<table border="0" width="100%" cellpadding="3" cellspacing="0" align="center">
  <tr>
    <td>전체 : <?=$total?> 개의 상담건이 있습니다.</td>
  </tr>
<table>
<table border="0" width="100%" cellpadding="0" cellspacing="1" align="center">
  <tr class="titlebar" height="23" align=center>
    <td width="50"><font color="#FFFFFF">No</font></td>
    <td width="40%"><font color="#FFFFFF">제목</font></td>
    <td><font color="#FFFFFF">작성자</font></td>
    <td><font color="#FFFFFF">작성일</font></td>   
    <td width=55><font color="#FFFFFF">답글</font></td>
    <td width=55><font color="#FFFFFF">수정</font></td>
    <td width=55><font color="#FFFFFF">삭제</font></td>
  </tr>
  <?
for($i=0; $i<$s_total; $i++){
mysql_data_seek($result_list, $i);
$row_list = mysql_fetch_array($result_list);
$real_num = $row_list[no];
$virtual_num = $total-$i-$start;
$idx = $row_list[idx];
$main = $row_list[main];
$sub = $row_list[sub];
$depth = $row_list[depth];
$name = $row_list[name];
$email = $row_list[email];
$user_id = $row_list[user_id];
$subject = stripslashes($row_list[subject]);
$contents = stripslashes($row_list[contents]);
$ip = $row_list[ip];
$wdate = date('Y-m-d',$row_list[wdate]);
?>
  <tr height="20">   
<td align=center><?=$virtual_num?></td>         
    <td align=left><? if($depth>0): ?>답변 : <? endif;?><a href="./qna_view.php?mode=view&no=<?=$real_num?>"><?=$subject?></a></td>
    <td align=center><?=$name?>(<?=$user_id?>)</td>         
    <td align=center><?=$wdate?></td>
    <td align=center><a href="./qna_reply.php?no=<?=$real_num?>"><img src='./images/reply.gif' border='0'></a></td>
    <td align=center><a href="./qna_modify.php?no=<?=$real_num?>"><img src='./images/edit.gif' border='0'></a></td>
    <td align=center><a href='./qna_process.php?operation=delete&no=<?=$real_num?>' onClick="if(confirm('[<?=$subject?>]를 정말 삭제 하시겠습니까?')){return true;}else{return false;}"><img src='./images/del.gif' border='0'></a></td>   
  </tr>
  <tr height="1">
    <td colspan="7" background="images/line_dot.gif"></td>
  </tr>
<?
}
?>
  <?if($total<'1'):?>
    <tr>
        <td colspan=7 align=center height='100'>등록된 글이 없습니다.</td>
    </tr>
    <tr height='1'>
        <td align=center colspan='7' background='images/line_dot.gif'><img src='images/line_dot.gif'></td>
    </tr>
  <?endif;?>
</table>
<br>
<table border="0" width="100%" cellpadding="0" cellspacing="0">
  <tr>
    <td width="100%" align="right"><a href=<?=$PHP_SELF?>?mode=list><img src='images/list.gif' border='0'></a></td>   
  </tr>
</table>
<font size=2>
<p align=center>
<?
// [0][1].. 참조

$page=  floor($start/($scale*$pagescale)) ;
$tmp_prev = $start - $scale; // 이전 누르면 찾아갈 곳
$tmp_next = $start + $scale; // 다음 누르면 찾아갈 곳

if($total > $scale){
if($start+1 > $scale*$pagescale){
$pre_start= $start - $scale*$pagescale ;
echo("<a href=$PHP_SELF?mode=list&start=$pre_start>[PREV $pagescale]</a>&nbsp;&nbsp;");
}
if($start>=$scale){//이전 링크
echo("<a href=$PHP_SELF?mode=list&start=$tmp_prev>◀</a> ");
}else{
echo("◀ ");
}
for($vj=0; $vj < $pagescale ; $vj++){
$ln = ($page * $pagescale + $vj)*$scale ;
$vk= $page * $pagescale + $vj+1 ;
if($ln<$total){
if($ln!=$start){
echo("<a href=$PHP_SELF?mode=list&start=$ln>[$vk]</a>");
}else{
echo("<font color=red><b>[$vk]</b></font>");
}
}
}
if($total>$start+$scale){//다음 링크
echo(" <a href=$PHP_SELF?mode=list&start=$tmp_next>▶</a>");
}else{
echo(" ▶");
}
if ($total > (($page+1)*$scale*$pagescale)){
$n_start=($page+1)*$scale*$pagescale ;
echo("&nbsp;&nbsp;<a href=$PHP_SELF?mode=list&start=$n_start>[NEXT $pagescale]</a>");
}
}
// [0][1]... 참조
?>
</p>
<?
include ("./footer.php");
?>





★ 리스트파일 끝 ★


======================================= 리스트 process파일  =================================

★ 리스트 update파일 시작 ★


<?php
session_start();
##-------------------------------------------------------------------##
##                          파일명 및 설명
##-------------------------------------------------------------------##
##  파일이름 : qna_process.php
##  파일설명 : 1:1 질문 및 답변 처리
##-------------------------------------------------------------------##
include("../lib/config.php");
include("../lib/function.php");
include ("./auth.php");

$wdate = mktime();//현재시간

############################ 글 등록  ###############################
if ($operation=="write"){
// 필수항목 검사

if (!$subject) goBack('제목을 입력하세요.');
if (!$contents) goBack('내용을 입력하세요.');

// 입력할 자료 정리
$subject = addSlash($subject);
$subject = htmlspecialchars($subject);
$contents = addSlash($contents);

$q_main = mysql_query("select min(main) from $QnA_Table where idx = '1'");
$c_main = @mysql_result($q_main,0,0);

if(!$c_main){
$main='99999999';
}else{
$main=$c_main-1;
}

// 디비 입력
$Query_Insert =
"insert into $QnA_Table values
('',
'1',
'$main',
'$sub',
'$depth',
'$name',
'$user_id',
'$subject',
'$contents',
'$REMOTE_ADDR',
'$wdate')
";
$Result_Insert = mysql_query($Query_Insert);
if ($Result_Insert){
$Prev_URI = '../qna.php?mode=list';
metaGo($Prev_URI,'글이 등록 되었습니다.');
}else{
goBack('등록중 에러가 발생하였습니다.','-1');
}
exit;
}

############################ 글 수정  ###############################
elseif ($operation=="modify"){
// 필수항목 검사
if (!$no) goBack('글 번호가 없습니다.');
if (!$subject) goBack('제목을 입력하세요.');
if (!$contents) goBack('내용을 입력하세요.');

$select_que = "select * from $QnA_Table where no='$no'";
$result_select = mysql_query($select_que);
$selected_row = mysql_fetch_array($result_select);

// 입력할 자료 정리
$subject = addslashes($subject);
$contents = addslashes($contents);

// 디비 쿼리
$Query_Modify = "update $QnA_Table set
subject='$subject',
contents='$contents'
where no='$no'
";

$Result_Modify = mysql_query($Query_Modify);
if ($Result_Modify){
$Prev_URI = './qna_list.php';
metaGo($Prev_URI,'글이 수정 되었습니다.');
}else{
goBack('수정중 에러가 발생하였습니다.','-1');
}
exit;

}

############################ 글 삭제  ###############################
elseif ($operation=="delete"){
if (!$no) goBack('글 번호가 없습니다.');

$delete_que = "delete from $QnA_Table where no='$no'";
$result_delete = mysql_query($delete_que);

if ($result_delete){
metaGo('./qna_list.php','글을 삭제하였습니다.');
}else{
goBack('삭제중 에러가 발생하였습니다.','-1');
}

}


############################ 답글 등록  ###############################
if ($operation=="reply"){
// 필수항목 검사
if (!$name) goBack('이름을 입력하세요.');
if (!$subject) goBack('제목을 입력하세요.');
if (!$contents) goBack('내용을 입력하세요.');

// 입력할 자료 정리
$subject = addslashes($subject);
$contents = addslashes($contents);

$q_main = mysql_query("select main,sub,depth from $QnA_Table where no = '$no'");
$c_main = @mysql_result($q_main,0,0);
$c_sub = @mysql_result($q_main,0,1);
$c_depth = @mysql_result($q_main,0,2);

$main = $c_main;
$sub = $c_sub + 1;
$depth = $c_depth + 1;

$sub_update_que = mysql_query("update $QnA_Table set sub=sub+1 where idx='1' and (main='$main' and sub>'$c_sub')");

// 디비 입력
$Query_Insert =
"insert into $QnA_Table values
('',
'1',
'$main',
'$sub',
'$depth',
'$name',
'$user_id',
'$subject',
'$contents',
'$REMOTE_ADDR',
'$wdate')
";
$Result_Insert = mysql_query($Query_Insert);
if ($Result_Insert){
$Prev_URI = './qna_list.php';
metaGo($Prev_URI,'글이 등록 되었습니다.');
}else{
goBack('등록중 에러가 발생하였습니다.','-1');
}
exit;
}

############################ 잘못된 접근  ###############################
else{
goBack('잘못된 방법으로 접근하셨습니다.');
}
?>
방황하는중년님 auto_increment 값(1번항목의 최종값)을 1을 더해서 올려본후 최적화를 했지만 변화가 없네요. 


엑스엠엘님  idx를 int타입으로 바꿨는데.. 여전히~~ 헐~~~
왼쪽 아래의  Index 의 Cardinality 의 숫자들이 생겼습니다.

PRIMARY  PRIMARY 2556      no 
idx  INDEX 2556      idx 
main 
sub 
name  INDEX 319      name 
user_id  INDEX 365      user_id
idx 인덱스까지 변경이 되었군요.

idx 인덱스를 지우고
alter table TABLE_NAME drop idx

다시 예전처럼 만들어 주세요.

alter table TABLE_NAME add index idx( idx, main, sub);
전체 66,554 |RSS
그누4 질문답변 내용 검색

회원로그인

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