디비내용을 csv 로 저장하기
- 서버상에서 명령어 사용하여 파일로 저장
mysql -u아이디 -p비밀번호 디비명 -B -e "select * from user limit 1;" | sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' > filename.csv
- php 에서 csv download 로 구현 할 경우
디비용량이 클경우 (1만건이 넘어가니 브라우져가 멈추는현상까지 나타났다.) 일반적인 방법으로 처리할수 없을경우가 있다.
아래의 방법으로 처리하여 7만건을 다운로드 받을때 2분이내로 처리되는걸 확인했다.
<?
$query = "
select * from user limit 1
";
exec('mysql -u아이디 -p비밀번호 디비명 -B -e " '.$query.' ;" | sed \'s/\t/","/g;s/^/"/;s/$/"/;s/\n//g\' ',$_list);
header( "Cache-Control: must-revalidate, post-check=0, pre-check=0");
header( "Content-type: application/vnd.ms-excel;charset=euc-kr" );
header( "Content-Disposition: attachment; filename=\filename.csv\"" );
header( "Content-Description: PHP4 Generated Data" );
echo '"아이디","이름","등급","전화","휴대폰","SMS수신여부","이메일","이메일 수신여부","주소","가입일"';
echo "\n";
for( $i = 1 ; $i < count($_list) ; $i++ ){
echo ($_list[$i]);
echo "\n";
}
exit;
?>
참고로 asp mssql
<%
Response.ContentType = "text/csv"
Response.AddHeader "content-disposition","attachment; filename=NAME OF FILE TO DOWNLOAD.csv"
set objRs = objCn.execute(sSql)
If Not objRs.EOF Then
For i=0 to objRs.Fields.Count-1
response.write objRs.Fields(i).Name
response.write","
Next
response.write "," & vbcrlf
Do Until objRs.EOF
For i = 0 To objRs.fields.Count-1
response.write """" & objRs.fields(i) & """" & ","
Next
response.write "," & vbcrlf
objRs.MoveNext
Loop
End If
objRs.Close
Set objRs=Nothing
%>