Изменение значений базы данных для экспорта в CSV - PullRequest
0 голосов
/ 01 декабря 2011

У меня есть скрипт экспорта в CSV, который извлекает определенные поля из определенной таблицы и их значения и создает файл Excel с данными. Смотри скрипт ниже.

Сначала он получает имена столбцов (кроме идентификатора). Во-вторых, он захватит значения имени, фамилии, employee_id, unit и present и поместит все эти значения в файл Excel.

Теперь обратите внимание, что он берет данные из таблицы: table_info В этой таблице UNIT и PRESENT существуют только из чисел. Эти числа представляют идентификаторы устройства / присутствуют из двух других таблиц:

table_units (id, title) table_presents (id, title)

То, что я хотел бы иметь, - это то, что в листе Excel он не показывает номера (идентификаторы) единицы / подарка, но название единицы / подарка. Как я могу сделать это? Мои знания PHP просто останавливаются здесь.

        $table = 'table_info';
    $file = 'export';

    $result = mysql_query("SHOW COLUMNS FROM ".$table."");
    $i = 0;
    if (mysql_num_rows($result) > 0) {
        while ($row = mysql_fetch_assoc($result)) {
            if($row['Field'] != 'id'){
                $csv_output .= $row['Field']."; ";
                $i++;
            }
        }
    }
    $csv_output .= "\n";

    $values = mysql_query("SELECT firstname, familyname, employee_id, unit, present FROM ".$table."") or die(mysql_error());
    while ($rowr = mysql_fetch_row($values)) {

        for ($j=0;$j<$i;$j++) { 
            $csv_output .= $rowr[$j]."; ";
        }
        $csv_output .= "\n";
    }

    $filename = $file."_".date("Y-m-d_H-i",time());
    header("Content-type: application/vnd.ms-excel");
    header("Content-disposition: csv" . date("Y-m-d") . ".csv");
    header("Content-disposition: filename=".$filename.".csv");
    print $csv_output;
    exit;

Ответы [ 2 ]

0 голосов
/ 01 декабря 2011

Не уверен, почему вы используете ; вместо ,,

Вот проблемы, которые я обнаружил: -

$result = mysql_query("SHOW COLUMNS FROM ".$table."");
==>
$result = mysql_query("SHOW COLUMNS FROM ".$table." WHERE Field!='id'");
// so, it would skip column id

Все for ($i ... ) не нужны, и у вас есть дополнительные ; в каждом ряду,
вместо этого сделайте взрыв: -

$csv_output .= $row['Field']."; ";
==>
$csv_output .= implode(';', $row);
0 голосов
/ 01 декабря 2011

Измените свой SQL-запрос, чтобы сделать объединение, которое включает table_units и table_presents.Или, если вы обеспокоены тем, что объединение вызовет узкое место в производительности, вы можете хранить table_units и table_presents в массиве с ключом ID, на который можно ссылаться, когда у вас есть внешние ключи (unit_id, present_id).

...