2010-03-01 6 views
1

Я пытаюсь экспортировать данные из моей базы данных MySQL в несколько файлов CSV, а затем GZIP их.PHP CSV экспорт функции

У меня есть несколько проблем, которые делают его экспорта в CSV файл сложный ...

  1. Несколько полей (10) должны быть в 1 CSV файл
  2. Другие поля (многократным!) Являются сериализован и должен быть экспортирован в другой файл CSV с двумя другими несериализованными полями, включенными в этот файл CSV.

Что я хочу сделать, это создать все файлы CSV, созданные в файле gzip ... Вот что у меня есть до сих пор! Что происходит, пользователь проверяет разные флажки, с помощью которых они хотят экспортировать файл. Затем он передается в этот файл, где каждый файл имеет разные запросы SELECT и имена полей. Я даже не начал разбираться с сериализованными данными ... Я понятия не имею, как я это сделаю. Затем он возвращает CSV-файл, и я помещаю этот файл в массив, ожидающий экспорта в gzip ... даже не знаю, смогу ли я это сделать.

Любые предложения или помощь были бы высоко оценены!

$files = array(); 

if(in_array("general", $_POST['exportid'])){ 
$files[] = CSVoutput("SELECT timestamp, id, monday, tuesday, wednesday, thursday, friday, saturday, sunday, records, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 23, 24 FROM hourly", array(timestamp, id, monday, tuesday, wednesday, thursday, friday, saturday, sunday, records, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 23, 24)); 
} 

function CSVoutput($query, $fields){ 
$rsSearchResults = mysql_query($query) or die(mysql_error()); 

$out = ''; 
$columns = count($fields); 

// Put the name of all fields 
for ($i = 0; $i < $columns; $i++) { 
$l= $fields[$i]; 
$out .= '"'.$l.'",'; 
} 
$out .="\n"; 

// Add all values in the table 
while ($l = mysql_fetch_array($rsSearchResults)) { 
for ($i = 0; $i < $columns; $i++) { 
$out .='"'.$l["$i"].'",'; 
} 
$out .="\n"; 
} 
return $out; 
} 
exit; 

ответ

2

Проверьте функцию fputcsv(). Он будет обрабатывать кавычки/избегать намного лучше, чем то, что у вас есть.

res = query_result 
row = fetch array from res 

handle/remove serialized columns in row 
fputcsv(row array keys) 
fputcsv(row values) 

while(row = fetch from res) 
    handle/remove serialized columns in row 
    fputcsv(row values) 
+0

Любые предложения о том, как реализовать эту функцию в моем скрипте? –

+1

Мне не нравится писать код для людей, но я редактирую какой-нибудь псевдокод –

+0

Это действительно полезно. Спасибо –

-1

Вы, возможно, причина делать это таким образом, но я просто хотел бы отметить, что SELECT ... INTO OUTFILE экспортирует в результате выбора в файл CSV.

Вы также можете указать, как поля разделены и так далее. Поэтому вы можете попробовать.

Также см этой страницы (прокрутите вниз SELECT INTO OUTFILE) http://dev.mysql.com/doc/refman/5.1/en/select.html

Если вам нужно сделать это вручную, то пожалуйста проигнорируйте мой комментарий.

+0

Отличная идея ... если бы у меня был доступ к файлу к моему серверу MySQL ... ;-D –

+0

После того, как файл был написан, вы можете открыть это с PHP и отображать его. Или не работает PHP на том же сервере, что и MySQL? –

+0

Сервер MySQL находится на другом сервере ... –

Смежные вопросы