묻고답하기
게시판 목록과 확장변수를 엑셀로 뽑아올때 배열관련문제
2014.02.10 15:25
게시판 목록에 확장변수를 포함시켜 리스트 형태로 출력시켜 사용하는 게시판이 있는데
그 목록대로 엑셀로 꼭 뽑아와야 할 일이 생겨서 php파일을 하나 만들었는데
XE의 DB 구조상의 문제인지 쿼리를 날려서 출력하면 확장변수가 세로로 출력되는 바람에 제목,이름,날짜도 덩달아 중복되서 출력이 되어버리네요
이렇게 출력이 되어야 하는데
이렇게 출력이 됩니다.
각 게시물마다 확장변수가 3개라면 30개의 게시물이 있다면 90개가 출력이 되어버립니다. ㅠㅠ
XE 테이블 구조상 xe_documets와 xe_document_extra_vars 두개의 테이블에 따로 저장이 되므로 모듈번호와 글번호가 같은 확장변수를 뽑을 수 있게끔 했구요
문제는 확장변수 수가 여러개라면 xe_document_extra_vars 테이블의 var_idx 필드의 갯수만큼 세로로 정렬이 되어 버립니다.
소스는
$info = array(
"host" => "localhost",
"user" => "id",
"pass" => "pw",
"db" => "dbname",
"table" => "xe_documents",
"table1" => "xe_document_extra_vars"
);
$getFields = array("title","nick_name","regdate","value");
$stamp = mktime(); $str = date("Y년 m월 d일", $stamp);
$stamp = mktime(); $fileout = date("Ymd", $stamp);
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=$fileout.xls");
$con = mysql_connect($info[host], $info[user], $info[pass]) || die(mysql_error());
mysql_query("set names utf8");
$con_db = mysql_select_db($info[db]) || die(mysql_error());
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<table border=1>
<tr>
<td>항목A</td>
<td>항목B</td>
<td>항목C</td>
<td>항목D</td>
<td>항목E</td>
<td>항목F</td>
</tr>
<?
$result=mysql_query("select * from $info[table] as A, $info[table1] as B where A.module_srl=B.module_srl and A.document_srl=B.document_srl and A.module_srl='모듈번호' and B.var_idx order by A.document_srl, regdate desc");
while( $data = mysql_fetch_assoc($result) ){
echo"<tr>";
foreach($data as $key => $val)
{
if(in_array($key, $getFields)) echo "<td>".htmlspecialchars($val)."</td>";
}
echo"</tr>";
}
?>
</table>
</body>
</html>
----------------------------------------------
답변중에
생각만 조금 더한다면
쿼리 돌린 while문 안에 쿼리를 한번 더 돌리는 것은 어떨까요?
모듈이 엄청 많은 것은 아니니까 저정도 돌린다고 부하가 크지 않을 테니까요.
xe_documents를 쿼리로 불러오고
white문 안에 xe_document_extra_vars에서 모듈번호가 같은 것만 쿼리로 또 불러오는 것입니다.
그래서 출력을 xe_documents의 데이터만 가로로 죽 나열하고 tr로 넘기기 전에 xe_document_extra_vars의 해당 값을 또 가로로 배치하는 것이죠.
라고 말씀주셨는데.. 이해가 잘안되어서요. ㅠ 방법 알려주시면 감사하겠습니다.