웹마스터 팁
데이터 이전 후 list_order 조정
2013.04.07 00:10
제로보드4에서 xe로 데이터 이전 후에 최근게시물과 최근댓글의 순서가 엉망입니다.
조사해 보았더니 list_order 값이 자료 일련번호로 설정되어 있었습니다.
또 [데이터 들여오기]할 때 xe는 읽어오는 게시물에 일련번호를 할당하면서
list_order 값도 같은 값으로 할당하고 있었습니다.
데이터 들여오기 할 때 제로보드4의 등록일시(regdate)를 정확하게 가져왔는데
등록일시 순으로 list_order 값을 새로 설정해 주는 프로그램을 만들어 보았습니다.
다음은 댓글 테이블 xe_comments 에 대한 PHP 프로그램입니다.
echo "<p>";
echo "1. Comment 테이블의 list_order를 regdate 순으로 조정 <br />";
$query = "SELECT comment_srl FROM xe_comments where 1 ORDER BY regdate ASC";
$result = ecsql($query);
$total_record = mysql_num_rows($result);
echo " Comment total count = $total_record <br />";
for ($i=1; $i <= $total_record; $i++) {
$neworder = $i;
$row = mysql_fetch_object($result);
$srl = $row->comment_srl;
$query="UPDATE xe_comments SET list_order='$neworder' WHERE comment_srl='$srl'";
$res = ecsql($query);
}
for ($i=1; $i <= $total_record; $i++) {
$neworder = -$i;
$query="UPDATE xe_comments SET list_order='$neworder' WHERE list_order='$i'";
$res = ecsql($query);
}
echo "</p>";
SELECT 문에서는 테이블의 모든 자료를 등록일시 순으로 읽어 들입니다.
중간의 UPDATE 문에서는 위에서 읽어들인 순서대로 양의 정수를 list_order에 넣어 줍니다.
마지막의 UPDATE에서는 양의 정수로 입력된 list_order를 음의 정수를 변경해 줍니다.
이렇게 양의 정수를 넣었다가 음의 정수로 변경하는 이유는 입력중 list_order의 유일성때문입니다.
같은 방법으로
document 테이블의 list_order를 regdate 순으로 조정
document 테이블의 update_order를 last_update 순으로 조정
member 테이블의 list_order를 last_login 순으로 조정 해 주었습니다.
그 결과 최근댓글과 최근게시물이 정상적으로 출력되고 있습니다.
- [2017/02/10] 묻고답하기 스케치북 최근게시물 상단 탭 오른쪽 여백 없애기
- [2016/12/02] 묻고답하기 스케치북 최근게시물 새글(new) 표시 기간 연장 방법은?
- [2014/04/07] 묻고답하기 메인화면에 있는 최근게시물을 클릭하면 이동을 안합니다. 도움부탁드려요~ *1
- [2012/02/04] 묻고답하기 최근게시물 여러줄 추출에 관하여 질문 있습니다.
- [2011/10/31] 묻고답하기 최근 게시물을 메인페이지에 나오게 하고싶은데 안나오네요..
안녕하세요.
제로보드 게시판에서
wooildang 님 게시글을 보고 문의 드립니다.
제가 필요한 사항이랑 같은 부분을 해결해주셨는데 진행해보니 수행이 되지 않아
초면임에도 불구하고 메일 드립니다.
작성해주신 글은
http://www.xpressengine.com/tip/21844540
입니다.
저는 comment가 아니라 document의 정렬이 필요해서
게시글을 참조하여
<?
define('__XE__', true); require_once('./config/config.inc.php'); $oContext = &Context::getInstance(); $oContext->init(); $oDB=&DB::getInstance();
echo "<p>";
echo "1. Document 테이블의 list_order를 regdate 순으로 조정 <br />";
$query = "select document_srl from xe_documents where 1 order by regdate ASC";
$result = mysql_query($query);
$total_record = mysql_num_rows($result);
echo " Document total count = $total_record <br />";
for ($i=1; $i <= $total_record; $i++) {
$neworder = $i;
$row = mysql_fetch_object($result);
$srl = $row -> document_srl;
//echo " document_srl = $srl , $neworder <br />";
//$query= "update xe_documents set list_order='$neworder' where document_srl='$srl'";
//$result = mysql_query($query);
}
for ($i=1; $i <= $total_record; $i++) {
$neworder = -$i;
echo "$srl, -$i <br />";
//$query= "'update xe_documents set list_order='$neworder' WHERE list_order='$i'";
//$result = mysql_query($query);
}
echo "</p>";
?>
그런데
결과는
1. Document 테이블의 list_order를 regdate 순으로 조정
Document total count = 5782
이렇게만 뜨고 암것도 안나오고 게시물 순서도 안바뀌네요..
1. 게시글을 추출하여 다른 XE로 만든 홈페이지로 옮기다가 잘못하여 삭제를 하였고
2. 다시 옮겼던 홈페이지에서 추출해서 원래 게시판으로 가져왔는데
3. 당연히 order가 엉망이 되어 버렸습니다.
4. 날자 순으로 게시글의 order 순서를 update 하고 싶습니다.
비책을 알려주시면 정말 감사하겠습니다.
연락 기다리겠습니다.
감사합니다.