更改CSV导出的数据库值

时间:2011-12-01 14:57:25

标签: php mysql export-to-csv

我有一个CSV导出脚本,用于抓取某个表中的某些字段及其值,并使用该数据创建一个Excel文件。见下面的脚本。

首先获取列名称(ID除外)。 其次,它将获取firstname,lastname,employee_id,unit和present的值,并将所有这些值放在Excel文件中。

现在请注意,它会从表中获取数据:table_info 在此表中,UNIT和PRESENT仅存在数字。这些数字代表另外两个表中单位/现在的ID:

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

我想要的是,在Excel表格中,它不显示单位/现在的数字(id),而是单位/现在的标题。我怎么能做到这一点?我的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 :(得分:0)

更改您的sql查询以执行包含table_units和table_presents的连接。或者,如果您担心连接会导致性能瓶颈,您可以将table_units和table_presents存储在由ID键控的数组中,当您拥有foriegn键时可以引用它(unit_id,present_id)。

答案 1 :(得分:0)

不确定您使用;代替,的原因,

以下是我发现的问题: -

$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);